Esta seção descreve como definir o caminho de construção Java, isto é, o classpath utilizado para construção de um projeto Java. Um classpath é uma matriz de contas de entradas de classpath para tipos disponíveis no formato de origem ou binário, utilizadas para localizar tipos disponíveis. A ordem dessas entradas define a precedência dos tipos disponíveis.
O caminho de construção Java também determina a estrutura de um elemento de projeto Java, uma vez que todas as raízes de fragmento de pacote originam-se diretamente do caminho de construção Java (cada entrada é mapeada para uma ou mais raízes de fragmento de pacote; consulte getPackageFragmentRoots).
Esta seção não descreve o caminho de tempo de execução Java que pode ser definido separadamente; consulte a seção relacionada sobre como executar programas Java.
É possível alterar através de programação o caminho de construção de um projeto utilizando
setRawClasspath no elemento Java do projeto correspondente, por exemplo:
IProject project = ... // obter algum recurso de projeto
IJavaProject javaProject = JavaCore.create(project);
IClasspathEntry[] newClasspath = ...;
javaProject.setRawClasspath(newClasspath, someProgressMonitor);
Observe que também existe uma variante de setRawClasspath
que permite que o caminho de construção Java e a localização de saída do projeto sejam definidos ao mesmo tempo.
O caminho de construção Java permanece em um arquivo chamado '.classpath' na localização do projeto. A finalidade desse arquivo é fornecer uma maneira de compartilhar as definições do caminho de construção Java com outros através de algum repositório de código fonte. Especificamente, esse arquivo não deve ser editado manualmente, pois poderá ser danificado.
As entradas de classpath podem ser definidas com os métodos de fábrica definidos em JavaCore, para que se possa fazer referência a um dos seguintes:
por ex., entrada indicando a pasta de origem 'src' do projeto 'MyProject':
IClassPathEntry srcEntry = JavaCore.newSourceEntry(new Path("/MyProject/src");
por ex., entrada indicando a pasta de arquivos de classe 'lib' de 'MyProject':
IClassPathEntry libEntry = JavaCore.newLibraryEntry(
new Path("/MyProject/lib"),
null, //sem origem
null, //sem origem
false); //não exportado
por ex., entrada indicando um JAR externo com conexão de origem:
IClassPathEntry libEntry = JavaCore.newLibraryEntry(
new Path("d:/lib/foo.jar"), // localização da biblioteca
new Path("d:/lib/foo_src.zip"), //localização do archive de origem
new Path("src"), //caminho raiz do archive de origem
true); //exportado
por ex., entrada indicando um projeto de pré-req. 'MyFramework', exportado implicitamente para projetos dependentes adicionais:
IClassPathEntry prjEntry = JavaCore.newProjectEntry(new Path("/MyFramework"), true); //exportado
por ex., entrada indicando uma biblioteca referida indiretamente utilizando uma variável 'HOME', em que a conexão de origem também é definida utilizando 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 archive de origem
new Path("SRC_ROOT"), //caminho raiz do archive de origem
true); //exportado
JavaCore.setClasspathVariable("HOME", new Path("d:/myInstall"), null); // sem progresso
por ex., entrada indicando um contêiner de biblioteca de classe do sistema:
IClassPathEntry varEntry = JavaCore.newContainerEntry(
new Path("JDKLIB/default"), // contêiner 'JDKLIB' + dica '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 "Contêiner básico da biblioteca JDK"; }
public int getKind() { return IClasspathContainer.K_SYSTEM; }
public IPath getPath() { return new Path("JDKLIB/basic"); }
}
},
null);
Também é possível consultar o classpath resolvido de um projeto utilizando getResolvedClasspath. Se necessário, esta operação disparará a inicialização de variável(is) e/ou contêiner(es) envolvido(s). Observe que várias operações de Gabarito Java fazem com que o caminho de construção Java seja resolvido implicitamente. Por ex., calcular as raízes de fragmento de pacote de um projeto requer a resolução do caminho de construção.