In questa sezione viene descritto come impostare il percorso di build Java, ossia il percorso classi utilizzato per la creazione di unprogetto Java. Un percorso classi è una matrice diimmissioni del percorso classi che tengono conto dei tipi disponibili nel form binario o del codice sorgente che vengono utilizzati per la ricerca dei tipi disponibili. L'ordinamento di tali immissioni definisce la precedenza dei tipi disponibili.
Il percorso di build Java regola anche la struttura di un elemento di un progetto Java, dal momento che tutte le radici del frammento di pacchetto derivano direttamente dal percorso di build Java (ciascun elemento si associa a una o più radici del frammento di pacchetto, vedere getPackageFragmentRoots).
Questa sezione non copre il percorso di run-time che è possibile definire separatamente. Per informazioni su come eseguire i programmi Java, vedere la sezione relativa.
E possibile modificare in modo programmatico il percorso di build di un progetto utilizzando
setRawClasspath sull'elemento Java del progetto corrispondente, ad esempio:
IProject project = ... // ottenere risorse di progetto
IJavaProject javaProject = JavaCore.create(project);
IClasspathEntry[] newClasspath = ...;
javaProject.setRawClasspath(newClasspath, someProgressMonitor);
Esiste anche una variante di setRawClasspath che consente di definire contemporaneamente il percorso di build Java e il percorso di output del progetto.
Il percorso di build Java viene reso permanente in un file denominato '.classpath' nel percorso del progetto. Lo scopo di tale file è fornire una modalità di condivisione delle impostazioni del percorso di build Java mediante repository del codice sorgente. In particolare, questo file non va modificato manualmente, in quanto potrebbe risultarne danneggiato.
E possibile definire le immissioni del percorso classi utilizzando i metodi factory definiti in JavaCore, così come per fare riferimento ad uno degli elementi seguenti:
esempio di immissione che denota la cartella di origine 'src' del progetto 'MyProject':
IClassPathEntry srcEntry = JavaCore.newSourceEntry(new Path("/MyProject/src");
esempio di immissione che denota la cartella di file di classe 'lib' di 'MyProject':
IClassPathEntry libEntry = JavaCore.newLibraryEntry(
new Path("/MyProject/lib"),
null, //nessuna origine
null, //nessuna origine
false); //non esportato
esempio di immissione che denota un file JAR esterno con associazione di origine:
IClassPathEntry libEntry = JavaCore.newLibraryEntry(
new Path("d:/lib/foo.jar"), // percorso libreria
new Path("d:/lib/foo_src.zip"), //percorso archivio origine
new Path("src"), //percorso directory principale archivio origine true); //esportato
esempio di immissione che denota un progetto prerequisito 'MyFramework', implicitamente esportato ad altri progetti dipendenti:
IClassPathEntry prjEntry = JavaCore.newProjectEntry(new Path("/MyFramework"), true); //esportato
esempio di immissione che denota una libreria alla quale si fa riferimento indirettamente utilizzando una variabile 'HOME', in cui anche l'associazione origine viene definita utilizzando le variabili 'SRC_HOME' e 'SRC_ROOT' :
IClassPathEntry varEntry = JavaCore.newVariableEntry(
new Path("HOME/foo.jar"), // percorso libreria
new Path("SRC_HOME/foo_src.zip"), //percorso archivio origine
new Path("SRC_ROOT"), //percorso directory principale archivio origine
true); //esportato
JavaCore.setClasspathVariable("HOME", new Path("d:/myInstall"), null); // nessun avanzamento
esempio di immissione che denota un contenitore di libreria di classe di sistema:
IClassPathEntry varEntry = JavaCore.newContainerEntry(
new Path("JDKLIB/default"), // container 'JDKLIB' + hint 'default'
false); //non esportato
JavaCore.setClasspathContainer(
new Path("JDKLIB/default"),
new IJavaProject[]{ myProject }, // valore per '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);
E possibile eseguire query anche per il percorso classi risolto di un progetto mediante getResolvedClasspath. Questa operazione avvia l'inizializzazione delle variabili e/dei contenitori coinvolti, se necessario. Molte operazioni del modello Java determinano implicitamente la risoluzione del percorso di build Java, ad esempio l'elaborazione delle radici del frammnento di pacchetto di un progetto richiede la risoluzione del percorso di build.