Esta sección describe cómo establecer la vía de acceso de construcción Java, es decir, la vía de acceso de clases utilizada para crear un proyecto Java. Una vía de acceso de clases es una matriz de entradas de vía de acceso de clases que contabiliza los tipos disponibles en formato fuente o binario, que se utilizan para buscar los tipos disponibles. El orden de estas entradas define la preferencia de los tipos disponibles.
La vía de acceso de construcción Java también gobierna la estructura de un elemento de proyecto Java, ya que todas las raíces de fragmento de paquete se derivan directamente de la vía de acceso de construcción Java (cada entrada se correlaciona con una o más raíces de fragmento de paquete, consulte getPackageFragmentRoots).
Esta sección no describe la vía de acceso de ejecución Java que puede definirse por separado; consulte la sección relacionada acerca de cómo ejecutar programas Java.
Puede cambiar programáticamente la vía de acceso de construcción de un proyecto mediante
setRawClasspath en el elemento Java del proyecto correspondiente, como por ejemplo:
IProject project = ... // obtener algún recurso de proyecto
IJavaProject javaProject = JavaCore.create(project);
IClasspathEntry[] newClasspath = ...;
javaProject.setRawClasspath(newClasspath, someProgressMonitor);
Tenga en cuenta que también existe una variante de setRawClasspath
que permite definir la vía de acceso de construcción Java y la ubicación de salida del proyecto simultáneamente.
La vía de acceso de construcción Java es persistente en un archivo denominado '.classpath' bajo la ubicación del proyecto. El propósito de este archivo es proporcionar una forma de compartir valores de vía de acceso de construcción Java con otros usuarios mediante algún depósito de código fuente. Específicamente, este archivo no debe editarse manualmente, ya que podría resultar dañado.
Las entradas de vía de acceso de clases pueden definirse mediante métodos de fábrica definidos en JavaCore, para hacer referencia a cualquiera de los siguientes elementos:
Ejemplo de entrada que indica la carpeta fuente 'src' del proyecto 'MyProject':
IClassPathEntry srcEntry = JavaCore.newSourceEntry(new Path("/MyProject/src");
Ejemplo de entrada que indica la carpeta de archivo de clase 'lib' de 'MyProject':
IClassPathEntry libEntry = JavaCore.newLibraryEntry(
new Path("/MyProject/lib"),
null, //sin fuente
null, //sin fuente
false); //no exportada
Ejemplo de entrada que indica un JAR externo con conexión de fuente:
IClassPathEntry libEntry = JavaCore.newLibraryEntry(
new Path("d:/lib/foo.jar"), // ubicación de biblioteca
new Path("d:/lib/foo_src.zip"), //ubicación de archivador fuente
new Path("src"), //vía de acceso raíz de archivador fuente
true); //exportado
Ejemplo de entrada que indica el proyecto prerrequisito 'MyFramework', exportado implícitamente a proyectos de mayor dependencia:
IClassPathEntry prjEntry = JavaCore.newProjectEntry(new Path("/MyFramework"), true); //exportado
Ejemplo de entrada que indica una biblioteca a la que se hace referencia indirectamente mediante una variable 'HOME', en la que también se define la conexión de fuente mediante las variables 'SRC_HOME' y 'SRC_ROOT':
IClassPathEntry varEntry = JavaCore.newVariableEntry(
new Path("HOME/foo.jar"), // ubicación de biblioteca
new Path("SRC_HOME/foo_src.zip"), //ubicación de archivador fuente
new Path("SRC_ROOT"), //vía de acceso raíz de archivador fuente
true); //exportado
JavaCore.setClasspathVariable("HOME", new Path("d:/myInstall"), null); // sin progreso
Ejemplo de entrada que indica un contenedor de biblioteca de clases del sistema:
IClassPathEntry varEntry = JavaCore.newContainerEntry(
new Path("JDKLIB/default"), // contenedor 'JDKLIB' + hint 'default'
false); //no exportado
JavaCore.setClasspathContainer(
new Path("JDKLIB/default"),
new IJavaProject[]{ myProject }, // valor de 'myProject'
new IClasspathContainer[] {
new IClasspathContainer() {
public IClasspathEntry[] getClasspathEntries() {
return new IClasspathEntry[]{
JavaCore.newLibraryEntry(new Path("d:/rt.jar"), null, null, false);
};
}
public String getDescription() { return "Contenedor de bibliotecas JDK básico"; }
public int getKind() { return IClasspathContainer.K_SYSTEM; }
public IPath getPath() { return new Path("JDKLIB/basic"); }
}
},
null);
También es posible consultar la vía de acceso de clases resuelta de un proyecto mediante getResolvedClasspath. Esta operación desencadena la inicialización de las variables y/o contenedores implicados si es necesario. Tenga en cuenta que muchas operaciones de Modelo Java provocan implícitamente la resolución de la vía de acceso de construcción Java; por ejemplo, el cálculo de raíces de fragmento de paquete de proyecto requiere resolver la vía de acceso de construcción.