I det här avsnittet beskrivs hur du anger Java-byggsökvägen. Byggsökvägen är den klassökväg som används till att bygga ett Java-projekt (IJavaProject).
En klassökväg är helt enkelt en matris av classpathsposter (IClassPathEntry) som beskriver de typer som är tillgängliga. De typer som kan uppträda i käll- eller binärform och ordningen av posterna i sökvägen definierar uppslagningsordningen för upplösning av typer under en byggning.
Java-byggsökvägen återspeglas i strukturen för ett Java-projektelement. Du kan fråga ett projekt om dess paketfragmentrötter (IPackageFragmentRoot). Varje classpath-post är kopplad till en eller flera paketfragmentrötter, där vardera ytterligare innehåller en uppsättning paketfragment.
Den här diskussionen om byggsökvägarna innefattar inte Java-runtimesökvägen, som kan definieras separat från byggsökvägen. (Se Köra Java-kod för en diskussion om runtime-klassökväg.)
Du kan med programkod ändra ett projekts byggsökväg med
setRawClasspath på motsvarande projekts Java-element. Följande
kod anger klassökväg för en projektresurs:
IProject project = ... // hämta en projektresurs
IJavaProject javaProject = JavaCore.create(project);
IClasspathEntry[] newClasspath = ...;
javaProject.setRawClasspath(newClasspath, someProgressMonitor);
(Obs! Användningen av termen "raw" classpath (klassökväg) används till att framhäva det faktum att alla variabler som används till att beskriva postplatser inte har lösts upp.)
Java-byggsökvägen anges i filen '.classpath' i projektets filstruktur. Syftet med denna fil är att tillhandahålla ett sätt att dela inställningar för Java-byggsökvägar med andra genom källkodsbehållare. I synnerhet ska den fil inte redigeras manuellt eftersom den kan förstöras.
Classpath-poster kan definieras med fabriksmetoder som definieras i JavaCore. Classpath-poster kan hänvisa till något av följande:
Följande är ett exempel på en classpath-post som anger källmappen 'src' för projektet
'MyProject':
IClassPathEntry srcEntry = JavaCore.newSourceEntry(new Path("/MyProject/src"));
Följande är ett exempel på en classpath-post som ange klassfilsmappen 'lib' för 'MyProject':
IClassPathEntry libEntry = JavaCore.newLibraryEntry(
new Path("/MyProject/lib"),
null, //no source
null, //no source
false); //not exported
Följande classpath-post har en källbilaga:
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
Källarkivets rotsökväg beskriver platsen för roten i källarkivet. Om värdet anges till null, tilldelas arkivets rot dynamiskt.
Följande classpath-post anger det nödvändiga projektet 'MyFramework'.
IClassPathEntry prjEntry = JavaCore.newProjectEntry(new Path("/MyFramework"), true); //exported
Det går att registrera en automatisk classpath-variabelinitierare som anropas via utökningspunkten org.eclipse.jdt.core.classpathVariableInitializer när arbetsmiljön startas.
Följande classpath-post anger ett bibliotek vars plats lagras i variabeln 'HOME'. Källbilagan definieras med variablerna 'SRC_HOME' och '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 monitor
Det går att registrera en automatisk classpath-behållarinitierare som enkelt anropas genom utökningspunkten org.eclipse.jdt.core.classpathContainerInitializer när behållaren behöver bindas.
Följande classpath-post anger en biblioteksbehållare för systemklass:
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);
En classpath-källpost kan tilldelas ett utelämningsmönster, som förhindrar att vissa resurser i en källmapp visas i classpath. Om du använder ett mönster kan vissa delar av resursträdet filtreras ut. Varje utelämningsmönsters sökväg anges i förhållande till classpath-posten och använder en mönstermekanism som påminner om Ant. Utelämningsmönster kan användas till att ange kapslade källmappar så länge som det yttre mönstret inte utelämnar det inre mönstret.
Se getExclusionPatterns för mer information om utelämningsmönster.
Java-projekt-APIt isOnClasspath kontrollerar både medtagnings- och utelämningsmönster innan det fastställer om en viss resurs ligger i classpath.
Anmärkningar:
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
En classpath-källpost kan tilldelas ett medtagningsmönster, som explicit anger vilka resurser som ska visas i classpath. När inga medtagningsmönster anges, innehåller källposten alla relevanta filer i det resursträd som har roten i denna källposts sökväg. Om du anger ett eller flera medtagningsmönster betyder det att bara de angivna delarna av resursträdet ska tas med. Varje angiven sökväg måste vara en relativ sökväg, och tolkas i förhållande till källpostens sökväg. Filmönster är skiftlägeskänsliga. En fil som matchar av en eller flera av dessa mönster tas med i motsvarande paketfragments rot såvida den inte utelämnas av denna posts utelämningsmönster.
Se getExclusionPatterns
för en diskussion av syntaxen och semantiken i sökvägsmönster. Frånvaron av medtagningsmönster är semantiskt motsvarande det explicita medtagningsmönstret **
.
Java-projekt-APIt isOnClasspath kontrollerar både medtagnings- och utelämningsmönster innan det fastställer om en viss resurs ligger i classpath.
Exempel:
src/**
tar självt med alla filer under rotmappen src
.
src/**
och tests/**
tar med alla filer under rotmapparna src
och tests
.
src/**
tillsammans med utelämningsmönstret
src/**/Foo.java
tar med alla filer under rotmappen src
förutom de med namnenFoo.java
.