Esta secção descreve com definir um caminho de construção Java. O caminho de construção é o caminho de classes utilizado para construir um projecto Java (IJavaProject).
Um caminho de classes é simplesmente uma tabela de entradas de caminho de classes (IClassPathEntry) que descrevem os tipos disponíveis. Os tipos podem aparecer em formate fonte ou binário e a ordem das entradas no caminho define a ordem de procura para resolver tipos durante uma construção.
O caminho de construção Java está reflectivo na estrutura do elemento de um projecto Java. Pode consultar num projecto as respectivas raízes de fragmento de pacote (IPackageFragmentRoot). Cada entrada do caminho de classes é correlacionada com uma ou mais raízes do fragmento de pacote, e cada uma por sua vez contém um conjunto de fragmentos de pacote.
Esta abordagem ao caminho de construção não envolve o caminho de tempo de execução Java, que pode ser definido à parte do caminho de construção. (Ver Código de execução Java para uma discussão do caminho de classes de tempo de execução.)
Pode alterar de forma programática o caminho de construção de um projecto utilizando
setRawClasspath no correspondente elemento Java do projecto. O código seguinte define o caminho de classes para o recurso de um projecto:
IProject project = ... // get some project resource
IJavaProject javaProject = JavaCore.create(project);
IClasspathEntry[] newClasspath = ...;
javaProject.setRawClasspath(newClasspath, someProgressMonitor);
(Nota: A utilização do termo caminho de classes "raw (em bruto)" serve para realçar o facto de que não foram resolvidas quaisquer variáveis utilizadas para descrever localizações de entrada.)
O caminho de construção Java é incluído de forma persistente num ficheiro denominado '.classpath' na estrutura de ficheiro do projecto. O objectivo deste ficheiro é facultar uma forma de partilhas as definições do caminho de construção Java com outros através do repositórios de código fonte. Em particular, este ficheiros não deve ser editado manualmente, pois pode ser danificado.
As entradas de caminho de classes podem ser definidas com os métodos factory definidos no JavaCore. As entradas de caminho de classes podem fazer referência a qualquer um dos seguintes:
A seguir é apresentado um exemplo de uma entrada de caminho de classe que destaca a pasta de fonte 'src' do projecto 'MyProject':
IClassPathEntry srcEntry = JavaCore.newSourceEntry(new Path("/MyProject/src"));
A seguir é apresentado um exemplo de uma entrada de caminho de classe que destaca a pasta de ficheiros de classe 'lib' do 'MyProject':
IClassPathEntry libEntry = JavaCore.newLibraryEntry(
new Path("/MyProject/lib"),
null, //sem fonte
null, //sem fonte
false); //não exportado
A entrada de caminho de classes seguinte tem um anexo de fonte:
IClassPathEntry libEntry = JavaCore.newLibraryEntry(
new Path("d:/lib/foo.jar"), // localização da biblioteca
new Path("d:/lib/foo_src.zip"), //localização do arquivo fonte
new Path("src"), //caminho de raiz do arquivo fonte
true); //exportado
O caminho de raiz do arquivo fonte descreve a localização da raiz no arquivo fonte. Se definido para null, a raiz do arquivo é inferida de forma dinâmica.
A entrada de caminho de classes destaca um projecto de pré-requisitos 'MyFramework'.
IClassPathEntry prjEntry = JavaCore.newProjectEntry(new Path("/MyFramework"), true); //exportado
Pode registar um operador de inicialização de variável de caminho de classes que é invocado através do ponto de extensão org.eclipse.jdt.core.classpathVariableInitializer quando a área de trabalho é iniciada.
A entrada de caminho de classes destaca uma biblioteca cuja localização é mantida na variável 'HOME'. O anexo de fonte é definido com as variáveis 'SRC_HOME' e 'SRC_ROOT':
IClassPathEntry varEntry = JavaCore.newVariableEntry(
new Path("HOME/foo.jar"), // localização da biblioteca
new Path("SRC_HOME/foo_src.zip"), //localização do arquivo fonte
new Path("SRC_ROOT"), //caminho de raiz do arquivo fonte
true); //exportado
JavaCore.setClasspathVariable("HOME", new Path("d:/myInstall"), null); // no progress monitor
Pode registar um operador de inicialização de contentor de caminho de classes que é invocado de forma preguiçosa através do ponto de extensão org.eclipse.jdt.core.classpathContainerInitializer quando o contentor tem de ser limitado.
A entrada de caminho de classes destaca um contentor de bibliotecas de classes do sistema:
IClassPathEntry varEntry = JavaCore.newContainerEntry(
new Path("JDKLIB/default"), // contentor 'JDKLIB' + hint 'default'
false); //não exportado
JavaCore.setClasspathContainer(
new Path("JDKLIB/default"),
new IJavaProject[]{ myProject }, // valor para '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);
Pode ser atribuído um padrão de exclusão a uma entrada de fonte de caminho de classes; este padrão de exclusão evitar que determinados recursos na pasta de fonte sejam visíveis no caminho de classes. O uso do um padrão permite que porções especificadas da árvore de recursos sejam filtrados e não entrem. Cada um padrão de exclusão é relativo a uma entrada de caminho de classes e utiliza um mecanismo de padrão semelhante a Ant. Os um padrões de exclusão podem ser utilizados para especificar pastas de fonte imbricadas desde que o padrão de saída exclua o padrão de entrada.
Consultar getExclusionPatterns para obter mais detalhes sobre padrões exclusivos.
A API do projecto Java isOnClasspath verifica os padrões de inclusão e exclusão antes de determinar se um determinado recurso está no caminho de classes.
Observações:
IPath sourceFolder = new Path("/MyProject/src"); IPath outputLocation = sourceFolder.append("bin"); IClassPathEntry srcEntry = JavaCore.newSourceEntry( sourceFolder, // localização da pasta de fonte new Path[] { outputLocation }, // pasta imbricada excluída outputLocation); // localização de saída
Pode também ser atribuído um padrão de inclusão a uma entrada de fonte de caminho de classes; este padrão de inclusão define explicitamente os recursos que podem ser vistos no caminho de classes. Quando não está especificado qualquer padrão de inclusão, a entrada de fonte inclui todos os ficheiros relevantes na árvore de recursos com raiz no caminho desta entrada de fonte. Especificar um ou mais padrões de inclusão significa que apenas as porções especificadas da árvore de recursos pode ser incluídos. Cada caminho especificado tem de ser um caminho relativo e será interpretado em relação ao caminho desta entrada de fonte. Os padrões de ficheiros são sensíveis a maiúsculas e minúsculas. Um ficheiro que corresponda a um ou mais destes padrões e incluído na raiz do respectivo fragmento de pacote, a não ser que seja excluído por um ou mais padrões de exclusão desta entrada.
Consultar getExclusionPatterns
para uma discussão da sintaxe e semântica dos padrões de caminho.A ausência de padrões de inclusão é semanticamente equivalente ao padrão de inclusão explícito **
.
A API do projecto Java isOnClasspath verifica os padrões de inclusão e exclusão antes de determinar se um determinado recurso está no caminho de classes.
Exemplos:
src/**
inclui por si só todos os ficheiros na pasta de raiz denominada src
.
src/**
e tests/**
incluem todos os ficheiros nas pastas de raiz denominadas src
e tests
.
src/**
em conjunto com o padrão de exclusão src/**/Foo.java
inclui todos os ficheiros na pasta de raiz denominada src
excepto os das pastas denominadas Foo.java
.