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 = ... // get some project resource
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, //no source
null, //no source
false); //not exported
La voce del percorso classe di seguito riportato presenta un collegamento origine:
IClassPathEntry libEntry = JavaCore.newLibraryEntry(
new Path("d:/lib/foo.jar"), // library location
new Path("d:/lib/foo_src.zip"), //source archive location
new Path("src"), //source archive root path
true); //exported
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); //exported
È 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"), // library location
new Path("SRC_HOME/foo_src.zip"), //source archive location
new Path("SRC_ROOT"), //source archive root path
true); //exported
JavaCore.setClasspathVariable("HOME", new Path("d:/myInstall"), null); // no progress
È 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); //not exported
JavaCore.setClasspathContainer(
new Path("JDKLIB/default"),
new IJavaProject[]{ myProject }, // value for '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 inclusione ed esclusione prima di determinare se una particolare risorsa si trova nel percorso classi.
Note:
IPath sourceFolder = new Path("/MyProject/src"); IPath outputLocation = sourceFolder.append("bin"); IClassPathEntry srcEntry = JavaCore.newSourceEntry( sourceFolder, // source folder location new Path[] { outputLocation }, // excluded nested folder outputLocation); // output location
Ad una voce di origine del percorso classi può essere assegnato un modello di inclusione, che definisce le risorse che devono essere visibili sul percorso classi. Quando non è specificato alcun modello di inclusione, la voce di origine include tutti i file rilevanti nella struttura ad albero delle risorse con origine nel percorso di questa voce di origine. Se si specificano uno o più modelli di inclusione, solo le parti specificate della struttura ad albero delle risorse verranno incluse. Ciascun percorso specificato deve essere un percorso relativo e verrà interpretato come tale per il percorso di questa voce di origine. I modelli di file sono sensibili al maiuscolo/minuscolo. Un file associato a uno di questi modelli viene incluso nell'elemento principale del frammento di pacchetto a meno che non venga escluso da uno o più modelli di esclusione di questa voce.
Per una discussione sulla sintassi e sulla semantica dei modelli del percorso, vedere getExclusionPatterns(). L'assenza di modelli di inclusione equivale semanticamente al modello di inclusione esplicito **
.
L'API del progetto Java isOnClasspath verifica i modelli di inclusione ed esclusione prima di determinare se una particolare risorsa si trova nel percorso classi.
Esempi:
src/**
include tutti i file che si trovano nella cartella principale src
.
src/**
e tests/**
includono tutti i file che si trovano nelle cartelle principali src
e tests
.
src/**
, insieme al modello di esclusione
src/**/Foo.java
, include tutti i file che si trovano nella cartella principale src
tranne i file Foo.java
.