In questa sezione viene descritto come impostare il percorso di generazione Java. Il percorso di generazione è il percorso classi utilizzato per la creazione di un progetto Java (IJavaProject).
Un percorso classi non è altro che una matrice di voci del percorso classi (IClassPathEntry) che descrivono i tipi disponibili. I tipi possono essere visualizzati in formato di origine o in formato binario e l'ordine delle voci nel percorso definisce l'ordine di ricerca per la risoluzione dei tipi durante una generazione.
Il percorso di generazione Java si riflette nella struttura di un elemento del progetto Java. È possibile interrogare un progetto per le relative radici del frammento di pacchetto (IPackageFragmentRoot). Ciascuna voce del percorso di classi esegue l'associazione a una o più radici del frammento di pacchetto, ciascuna contenente un insieme di frammenti di pacchetto.
Questo aspetto del percorso di generazione non coinvolge il percorso di runtime Java, che può essere definito separatamente dal percorso di generazione. (Per il percorso classi di runtime, consultare la sezione Esecuzione di un codice Java).
È possibile modificare in modo programmatico il percorso di generazione di un progetto utilizzando
setRawClasspath sull'elemento Java del progetto corrispondente.
Il codice di seguito riportato imposta il percorso classi per una risorsa di progetto:
IProject project = ... // ottenere risorse di progetto
IJavaProject javaProject = JavaCore.create(project);
IClasspathEntry[] newClasspath = ...;
javaProject.setRawClasspath(newClasspath, someProgressMonitor);
(Nota: l'utilizzo del termine percorso classi "di base" ha lo scopo di enfatizzare il fatto che tutte le variabili utilizzate per descrivere i percorsi di immissione non sono state risolte).
Il percorso di generazione Java viene reso permanente in un file denominato '.classpath' nella struttura del file del progetto. Lo scopo di tale file è fornire una modalità di condivisione delle impostazioni del percorso di generazione Java mediante repository del codice di origine. In particolare, questo file non va modificato manualmente, in quanto potrebbe risultarne danneggiato.
È possibile definire le voci del percorso classi utilizzando i metodi factory definiti in JavaCore. Le voci del percorso classi possono fare riferimento a uno degli elementi di seguito riportati:
Di seguito viene riportata una voce del percorso classi di esempio che denota la cartella di origine 'src' del progetto 'MyProject':
IClassPathEntry srcEntry = JavaCore.newSourceEntry(new Path("/MyProject/src");
Di seguito viene riportata una voce del percorso classi di esempio che denota la cartella 'lib' del file di classe del progetto 'MyProject':
IClassPathEntry libEntry = JavaCore.newLibraryEntry(
new Path("/MyProject/lib"),
null, //nessuna origine
null, //nessuna origine
false); //non esportato
La voce del percorso classe di seguito riportato presenta un collegamento 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
true); //esportato
Il percorso directory principale archivio di origine descrive il percorso della directory principale all'interno dell'archivio di origine. Se impostato su null, la directory principale dell'archivio verrà dedotta dinamicamente.
La voce del percorso classe di seguito riportato denota un progetto prerequisito 'MyFramework'.
IClassPathEntry prjEntry = JavaCore.newProjectEntry(new Path("/MyFramework"), true); //esportato
È possibile registrare un inizializzatore della variabile del percorso classi automatico che viene richiamato mediante il punto di estensione org.eclipse.jdt.core.classpathVariableInitializer.
La voce del percorso classe di seguito riportato denota una libreria il cui percorso è contenuto nella variabile 'HOME'.
Il collegamento di origine viene definito 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
È possibile registrare un inizializzatore del contenitore del percorso classi automatico che viene richiamato mediante il punto di estensione org.eclipse.jdt.core.classpathContainerInitializer quando è necessario collegare il contenitore.
La voce del percorso classi di seguito riportata 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);
Ad una voce di origine del percorso classi può essere assegnato un modello di esclusione, che impedisce ad alcune risorse di una cartella di origine di essere visibili nel percorso classi. L'utilizzo di un modello consente alle parti specificate della struttura risorse di essere escluse tramite filtro. Il percorso di ciascun modello di esclusione è relativo alla voce del percorso classi e utilizza un meccanismo di modello simile a Ant. I modelli di esclusione possono essere utilizzati per specificare cartelle di origine nidificate fino a quando il modello esterno esclude il modello interno.
Per i dettagli sui modelli di esclusione, vedere getExclusionPatterns().
L'API del progetto Java isOnClasspath verifica i modelli di esclusione prima di determinare se una particolare risorsa si trova nel percorso classi.