Establecer la vía de construcción Java

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.

Cambiar la vía de construcció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.

Entradas de la vía de acceso de clases

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: 

Patrones de exclusión

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:

Patrones de inclusión

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:

Resolución de vía de acceso de clases

Dado que las variables y los contenedores de vía de acceso de clases le permiten definir dinámicamente las entradas de vía de acceso de clases enlazadas, la API de vía de acceso de clases distingue entre una vía de acceso de clases en bruto y una vía de acceso de clases resuelta. La vía de acceso de clases en bruto es la que se estableció originalmente en el proyecto Java mediante el método setRawClasspath, y puede consultarse con mayor precisión mediante el método getRawClasspath en el proyecto. La vía de acceso de clases resuelta se puede consultar con el método getResolvedClasspath. Esta operación desencadena la inicialización de las variables y contenedores que se necesiten para resolver la vía de acceso de clases. Muchas operaciones del Modelo Java provocan implícitamente la resolución de la vía de construcción Java. Por ejemplo, para calcular los directorios raíz de los fragmentos de paquete de un proyecto, hay que resolver la vía de construcción.