Her beskrives det hvordan du definerer Java-byggebanen. Byggebanen er klassebanen som brukes til å bygge et Java-prosjekt (IJavaProject).
En klassebane er rett og slett en matrise med klassebaneoppføringer (IClassPathEntry) som beskriver de typene som er tilgjengelige. Typene kan forekomme i kilde- eller binærform, og rekkefølgen av oppføringer i banen definerer oppslagsrekkefølgen for å behandle typer under en bygging.
Java-byggebanen gjenspeiles i strukturen til et Java-prosjektelement. Du kan spørre et prosjekt etter dets pakkefragmentrøtter (IPackageFragmentRoot). Hver klassebaneoppføring tilordnes til en eller flere pakkefragmentrøtter, som hver inneholder et sett med pakkefragmenter.
Denne diskusjonen av byggebanen omfatter ikke Java-kjøretidsbanen, som kan defineres atskilt fra byggebanen. (Kjøretidsklassebanen diskuteres i Kjøre Java-kode.)
Du kan programmatisk endre et prosjekts byggebane med
setRawClasspath på tilsvarende prosjekts Java-element. Følgende kode
definerer klassebanen for en prosjektressurs:
IProject project = ... // hent en prosjektressurs
IJavaProject javaProject = JavaCore.create(project);
IClasspathEntry[] newClasspath = ...;
javaProject.setRawClasspath(newClasspath, someProgressMonitor);
(Merk: Bruk av uttrykket "raw" for klassebanen er for å understreke at variabler som brukes til å beskrive oppføringsplasseringer, ikke er tolket.)
Java-byggebanen fortsetter inn i en fil kalt '.classpath' i prosjektets filstruktur. Formålet med denne filen er å være en måte å dele Java-byggebaneinnstillinger med andre på gjennom et kildekodelager.Denne filen bør ikke redigeres manuelt, siden den kan bli ødelagt.
Klassebaneoppføringer kan defineres med factory-metodene definert på JavaCore. Klassebaneoppføringer kan referere til hvilke som helst av følgende:
Her
er et eksempel på klassebaneoppføring som betegner kildemappen 'src' i prosjektet
'MyProject': IClassPathEntry srcEntry = JavaCore.newSourceEntry(new Path("/MyProject/src"));
Her er et eksempel på klassebaneoppføring som betegner klassefilmappen 'lib' til 'MyProject':
IClassPathEntry libEntry = JavaCore.newLibraryEntry(
new Path("/MyProject/lib"),
null, //ingen kilde
null, //ingen kilde
false); //eksporteres ikke
Følgende klassebaneoppføring har en kildetilknytning:
IClassPathEntry libEntry = JavaCore.newLibraryEntry(
new Path("d:/lib/foo.jar"), // bibliotekplassering
new Path("d:/lib/foo_src.zip"), //kildearkivplassering
new Path("src"), //rotbane for kildearkiv
true); //eksporteres
Rotbanen til kildearkivet beskriver plasseringen av roten innen kildearkivet. Hvis den settes til null, vil arkivets rot utledes dynamisk.
Følgende klassebaneoppføring betegner et obligatorisk prosjekt 'MyFramework'.
IClassPathEntry prjEntry = JavaCore.newProjectEntry(new Path("/MyFramework"), true); //eksporteres
Det er mulig å registrere en automatisk klassebanevariabelinitialiserer, som aktiveres gjennom utvidelsespunktet org.eclipse.jdt.core.classpathVariableInitializer når arbeidsområdet startes.
Følgende klassebaneoppføring betegner et bibliotek med plassering i variabelen 'HOME'. Kildetilknytningen er definert
med variablene 'SRC_HOME' og 'SRC_ROOT' :
IClassPathEntry varEntry = JavaCore.newVariableEntry(
new Path("HOME/foo.jar"), // bibliotekplassering
new Path("SRC_HOME/foo_src.zip"), //kildearkivplassring
new Path("SRC_ROOT"), //rotbane for kildearkiv
true); //eksporteres
JavaCore.setClasspathVariable("HOME", new Path("d:/myInstall"),
null); // ingen fremdriftsovervåker
Det er mulig å registrere en automatisk klassebanecontainerinitialiserer som aktiveres lat (lazily) via utvidelsespunktet org.eclipse.jdt.core.classpathContainerInitializer når containeren må bindes.
Følgende klassebaneoppføring betegner en bibliotekcontainer av systemklassen:
IClassPathEntry varEntry = JavaCore.newContainerEntry(
new Path("JDKLIB/default"), // container 'JDKLIB' + hint 'default'
false); //eksporteres ikke
JavaCore.setClasspathContainer(
new Path("JDKLIB/default"),
new IJavaProject[]{ myProject }, // verdi 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 klassebanekildeoppføring kan tildeles et eksklusjonsmønster, som hindrer visse ressurser i en kildemappe i å være synlige på klassebanen. Ved hjelp av et mønster kan gitte deler av ressurstreet filtreres ut. Hvert eksklusjonsmønster er relativt i forhold til klassebaneoppføringen, og bruker en mønstermekanisme som likner på Ant. Eksklusjonsmønstre kan brukes til å angi nestede kildemapper så lenge det ytre mønsteret utelater det indre mønsteret.
Du finner flere opplysninger om eksklusjonsmønstre i getExclusionPatterns.
Java-prosjektets API isOnClasspath kontrollerer både inklusjons- og eksklusjonsmønstre før det avgjøres om en bestemt ressurs er i klassebanen.
Merknader:
IPath sourceFolder = new Path("/MyProject/src"); IPath outputLocation = sourceFolder.append("bin"); IClassPathEntry srcEntry = JavaCore.newSourceEntry( sourceFolder, // kildemappeplassering new Path[] { outputLocation }, // ekskludert nestet mappe outputLocation); // utdataplassering
En klassebanekildeoppføring kan tildeles et inklusjonsmønster, som eksplisitt definerer ressurser som synlige på klassebanen. Når ingen inklusjonsmønstre er spesifisert, inkluderer kildeoppføringen alle relevante filer i ressurstreet med rot i denne kildens oppføringsbane. Hvis ett eller flere inklusjonsmønstre spesifiseres, kan bare de spesifiserte delene av ressurstreet inkluderes.Hver bane som spesifiseres, må være en relativ bane, og vil bli tolket i forhold til denne kildens oppføringsbane.Det skilles mellom små og store bokstaver i filmønstre.En fil som samsvarer med ett eller flere av disse mønstrene, inkluderes i tilsvarende pakkefragmentrot, med mindre den ekskluderes av et eller flere av denne oppføringens eksklusjonsmønstre.
Du finner en diskusjon av syntaksen og semantikken til banemønstre i
getExclusionPatterns. Fravær
av inklusjonsmønstre er semantisk likt med det eksplisitte inklusjonsmønsteret **
.
Java-prosjektets API isOnClasspath kontrollerer både inklusjons- og eksklusjonsmønstre før det avgjøres om en bestemt ressurs er i klassebanen.
Eksempler:
src/**
i seg selv inkluderer alle filer under en rotmappe kalt src
.
src/**
og tests/**
inkluderer alle filer under rotmappene kalt src
og tests
.
src/**
sammen med eksklusjonsmønsteret
src/**/Foo.java
inkluderer alle filer under en rotmappe kalt
src
unntatt dem som kalles Foo.java
.