Este apartado explica cómo establecer la vía de construcción Java. Vía de construcción es la vía de acceso de clases que permite construir un proyecto Java (IJavaProject).
La vía de acceso de clases es sencillamente una matriz de entradas (IClassPathEntry) que describen los tipos que están disponibles. Los tipos pueden aparecer en formato fuente o binario, y el orden de las entradas en la vía define el orden de búsqueda para resolver los tipos durante una construcción.
La vía de construcción Java se refleja en la estructura de un elemento de proyecto Java. Puede consultar un proyecto para obtener sus directorios raíz de fragmento de paquete (IPackageFragmentRoot). Cada entrada de vía de acceso de clases se correlaciona con uno o más directorios raíz de fragmento de paquete, cada uno de los cuales contiene a su vez un conjunto de fragmentos de paquete.
Esta explicación de la vía de construcción no atañe a la vía de tiempo de ejecución Java, que se puede definir con independencia de la vía de construcción. En el tema Ejecutar código Java hallará una explicación sobre la vía de acceso de clases de tiempo de ejecución.
Puede cambiar programáticamente la vía de construcción de un proyecto mediante el método
setRawClasspath en el elemento Java del correspondiente proyecto. El siguiente
código establece la vía de acceso de clases de un recurso de tipo proyecto:
IProject project = ... // obtener un recurso de tipo proyecto
IJavaProject javaProject = JavaCore.create(project);
IClasspathEntry[] newClasspath = ...;
javaProject.setRawClasspath(newClasspath, someProgressMonitor);
(Nota: la utilización del término vía de acceso de clases en bruto ("raw") sirve para enfatizar el hecho de que no se han resuelto las variables que se hayan empleado para describir las ubicaciones de las entradas).
La vía de construcción Java tiene persistencia en un archivo cuyo nombre tiene la extensión '.classpath' en la estructura de archivos del proyecto. La finalidad de este archivo es proporcionar una forma de compartir los valores de la vía de construcción Java con otros usuarios mediante un depósito de código fuente. Concretamente, este archivo no debe editarse de forma manual, porque podría resultar dañado.
Las entradas de la vía de acceso de clases se pueden definir mediante los métodos de fábrica definidos en JavaCore. Las entradas de la vía de acceso de clases pueden hacer referencia a:
A
continuación figura una entrada de proyecto de ejemplo que hace referencia
a la carpeta fuente 'src' del proyecto 'MyProject':
IClassPathEntry srcEntry = JavaCore.newSourceEntry(new Path("/MyProject/src");
A continuación figura una entrada de vía de acceso de clases de ejemplo que hace referencia
a 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
La siguiente entrada de vía de acceso de clases tiene la conexión de un 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 del directorio raíz de archivador fuente
true); //exportado
La vía de acceso del directorio raíz de archivador fuente describe la ubicación del directorio raíz dentro del archivador fuente. Si está establecida en null, el directorio raíz del archivador se deducirá dinámicamente.
La siguiente entrada de vía de acceso de clases hace referencia al proyecto prerrequisito 'MyFramework'.
IClassPathEntry prjEntry = JavaCore.newProjectEntry(new Path("/MyFramework"), true); //exportado
Es posible registrar un inicializador de variable de vía de acceso de clases automático que se invoca mediante el punto de extensión org.eclipse.jdt.core.classpathVariableInitializer en el momento de iniciarse el área de trabajo.
La siguiente entrada de vía de acceso de clases hace referencia a una
biblioteca cuya ubicación se conserva en la variable 'HOME'. La conexión
del fuente se define mediante las variables 'SRC_HOME' y 'SRC_ROOT':
IClassPathEntry varEntry = JavaCore.newVariableEntry(
new Path("HOME/foo.jar"), // ubicación de la biblioteca
new Path("SRC_HOME/foo_src.zip"), // ubicación del archivador fuente
new Path("SRC_ROOT"), // vía de acceso del directorio raíz del archivador fuente
true); //exportado
JavaCore.setClasspathVariable("HOME", new Path("d:/myInstall"), null); // sin progreso
Es posible registrar un inicializador de contenedor de vía de acceso de clases automático que se invoca en otro momento con el punto de extensión org.eclipse.jdt.core.classpathContainerInitializer cuando hay que enlazar el contenedor.
La siguiente entrada de vía de acceso de clases hace referencia a un
contenedor de biblioteca de clases del sistema:
IClassPathEntry varEntry = JavaCore.newContainerEntry(
new Path("JDKLIB/default"), // contenedor 'JDKLIB' + indicación '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 "Basic JDK library container"; }
public int getKind() { return IClasspathContainer.K_SYSTEM; }
public IPath getPath() { return new Path("JDKLIB/basic"); }
}
},
null);
A una entrada de fuente de vía de acceso de clases se le puede asignar un patrón de exclusión, el cual impide que ciertos recursos de una carpeta fuente sean visibles en la vía de acceso de clases. Si se utiliza un patrón, pueden quedar filtradas las partes especificadas del árbol de recursos. Cada vía de acceso del patrón de exclusión es relativa a la entrada de vía de acceso de clases y utiliza un mecanismo de patrón similar a Ant. Los patrones de exclusión permiten especificar carpetas fuente anidadas, siempre y cuando el patrón externo excluya el patrón interno.
En el tema getExclusionPatterns() hallará más detalles sobre los patrones de exclusión.
La API isOnClasspath de proyecto comprueba los patrones de exclusión antes de determinar si un recurso concreto está en la vía de acceso de clases.