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 repositorio 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 exportado
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 espacio 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 interior.
En el tema getExclusionPatterns() hallará más detalles sobre los patrones de exclusión.
La API isOnClasspath de proyecto comprueba los patrones de inclusión y exclusión antes de determinar si un recurso concreto está en la vía de acceso de clases.
Observaciones:
IPath sourceFolder = new Path("/MyProject/src"); IPath outputLocation = sourceFolder.append("bin"); IClassPathEntry srcEntry = JavaCore.newSourceEntry( sourceFolder, // ubicación de la carpeta fuente new Path[] { outputLocation }, // carpeta anidada excluida outputLocation); // ubicación de salida
A una entrada de fuente de vía de acceso de clases se le puede asignar un patrón de inclusión, que define explícitamente los recursos que estarán visibles en la vía de acceso de clases. Cuando no se especifican patrones de inclusión, la entrada del fuente incluye todos los archivos relevantes en el árbol de recursos enraizado en la vía de acceso de esta entrada del fuente. Si se especifica uno o más patrones de inclusión, solo se incluirán las partes especificadas del árbol fuente. Cada vía de acceso que se especifique debe ser una vía de acceso relativa, y se interpretará como relativa a la vía de acceso de esta entrada fuente. Los patrones de archivo son sensibles a las mayúsculas/minúsculas. Un archivo que coincide con uno o más de estos patrones se incluye en la raíz de fragmento de paquete correspondiente, a menos que se excluya mediante uno o más de los patrones de exclusión de esta entrada.
Consulte getExclusionPatterns()
para obtener información sobre la sintaxis y la semántica de los patrones de vía de acceso.
La ausencia de patrones de inclusión es semánticamente equivalente al patrón de inclusión
explícito **
.
La API isOnClasspath de proyecto comprueba los patrones de inclusión y exclusión antes de determinar si un recurso concreto está en la vía de acceso de clases.
Ejemplos:
src/**
por sí mismo incluye todos los archivos qeu se encuentran
en una carpeta raíz denominada src
.
src/**
y tests/**
incluye todos
los archivos que se encuentran en las carpetas raíz denominadas src
y
tests
.
src/**
junto con el patrón de exclusión
src/**/Foo.java
incluye todos los archivos que se encuentran en una carpeta raíz
denominada src
excepto los denominados Foo.java
.