I dette afsnit beskrives, hvordan du indstiller Java-byggestien. Byggestien er den classpath, der bruges til bygning af et Java-projekt (IJavaProject).
En classpath er simpelthen et array af classpath-indgange (IClassPathEntry), som beskriver de tilgængelige typer. Typerne kan blive vist i kildeformat eller binært format, og rækkefølgen af indgangene i stien definerer opslagsrækkefølgen ved fortolkning af typer, mens der bygges.
Java-byggestien afspejles i strukturen for et Java-projektelement. Du kan forespørge i et projekt om projektets rødder for pakkefragment (IPackageFragmentRoot). Hver classpath-indgang tilknyttes vha. mapping til én eller flere rødder for pakkefragment, og hver enkelt af disse indeholder atter et sæt pakkefragmenter.
Denne beskrivelse af byggestien involverer ikke Java-runtime-stien, som kan defineres adskilt fra byggestien. (Under Udfør Java-kode kan du finde en beskrivelse af runtime-classpath).
Du kan ændre byggestien for et projekt programmatisk ved at bruge
setRawClasspath på det tilsvarende projekts Java-element. Følgende kode
indstiller classpath for en projektressource:
IProject project = ... // hent en projektressource
IJavaProject javaProject = JavaCore.create(project);
IClasspathEntry[] newClasspath = ...;
javaProject.setRawClasspath(newClasspath, someProgressMonitor);
Bemærk: Udtrykket ubehandle ("raw") classpath bruges til at understrege det faktum, at de variabler, der evt. er anvendt til beskrivelse af indgangsplaceringer, ikke er blevet fortolket.
Java-byggestien er bevaret i en fil ved navn '.classpath' i projektets filstruktur. Formålet med denne fil er at levere en metode til deling af Java-byggestiens indstillinger med andre via et opbevaringssted for kildekode. Bemærk, at denne fil må ikke redigeres manuelt, da den risikerer at blive ødelagt.
Classpath-indgange kan defineres ved hjælp af de fabriksmetoder, der defineret for JavaCore. Classpath-indgange kan referere til følgende:
Følgende er et eksempel på en classpath-indgang, som angiver kildefolderen 'src' til
projektet 'MitProjekt':
IClassPathEntry srcEntry = JavaCore.newSourceEntry(new Path("/MitProjekt/src"));
Følgende er et eksempel på en classpath-indgang, som angiver klassefilsfolderen 'lib'
for 'MitProjekt':
IClassPathEntry libEntry = JavaCore.newLibraryEntry(
new Path("/MitProjekt/lib"),
null, //ingen kilde
null, //ingen kilde
false); //ikke eksporteret
Følgende classpath-indgang har en kilde tilknyttet:
IClassPathEntry libEntry = JavaCore.newLibraryEntry(
new Path("d:/lib/foo.jar"), // biblioteksplacering
new Path("d:/lib/foo_src.zip"), //kildearkivplacering
new Path("src"), //rodsti til kildearkiv
true); //eksporteret
Rodstien for kildearkivet beskriver placeringen af roden inde i kildearkivet. Hvis arkivet sættes til NULL, vil roden til arkivet blive udledt dynamisk.
Følgende classpath-indgang angiver forudsætningsprojektet 'MinStruktur'.
IClassPathEntry prjEntry = JavaCore.newProjectEntry(new Path("/MinStruktur"), true); //eksporteret
Det er muligt at registrere en automatisk initialiseringsfunktion for en classpath-variabel, som aktiveres via udvidelsespunktet org.eclipse.jdt.core.classpathVariableInitializer, når arbejdsområdet startes.
Følgende classpath-indgang angiver et bibliotek, hvis placering angives i variablen
'HOME'. Kildetilknytningen defineres ved hjælp af variablerne 'SRC_HOME' og 'SRC_ROOT':
IClassPathEntry varEntry = JavaCore.newVariableEntry(
new Path("HOME/foo.jar"), // biblioteksplacering
new Path("SRC_HOME/foo_src.zip"), //kildearkivplacering
new Path("SRC_ROOT"), //rodsti til kildearkiv
true); //eksporteret
JavaCore.setClasspathVariable("HOME", new Path("d:/myInstall"), null); // ingen statusovervågning
Det er muligt at registrere en automatisk initialiseringsfunktion for classpath-opbevaringsstedet, som lazy-aktiveres via udvidelsespunktet org.eclipse.jdt.core.classpathContainerInitializer, når det bliver nødvendigt at binde opbevaringsstedet.
Følgende classpath-indgang angiver et opbevaringssted for et systemklassebibliotek:
IClassPathEntry varEntry = JavaCore.newContainerEntry(
new Path("JDKLIB/default"), // opbevaringssted 'JDKLIB' + tip 'default'
false); //ikke eksporteret
JavaCore.setClasspathContainer(
new Path("JDKLIB/default"),
new IJavaProject[]{ mitProjekt }, // værdi for 'mitProjekt'
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);
Der kan tildeles et ekskluderingsmønster til en classpath-kildeindgang, hvilket forhindrer, at bestemte ressourcer i en kildefolder er synlige i classpath. Når der bruges mønster, kan bestemte dele af ressourcetræstrukturen filtreres væk. Hvert ekskluderingsmønster er relativt i forhold til classpath-indgangen og bruger en mønstermekanisme, der minder om Ant. Ekskluderingsmønstre kan bruges til at angive indlejrede kildefoldere, når blot det yderste mønster udelukker det inderste mønster.
Se getExclusionPatterns for at få flere oplysninger om ekskluderingsmønstre.
Java-projektets API isOnClasspath kontrollerer både inkluderings- og ekskluderingsmønstre, før det afgøres, om en bestemt ressource er i classpath.
Bemærkninger:
IPath sourceFolder = new Path("/MitProjekt/src"); IPath outputLocation = sourceFolder.append("bin"); IClassPathEntry srcEntry = JavaCore.newSourceEntry( sourceFolder, // kildefolderplacering new Path[] { outputLocation }, // ekskluderet indlejret folder outputLocation); // outputplacering
En classpath-kildeindgang kan også tildeles til et inkluderingsmønster, som eksplicit definerer ressourcer til at være synlige i classpath. Når der ikke er angivet nogen inkluderingsmønstre, inkluderer kildeindgangen alle relevante filer i ressourcetræstrukturen med rod i denne kildeindgangs sti. Hvis du angiver et eller flere inkluderingsmønstre, betyder det, at kun de angivne dele af ressourcetræstrukturen skal inkluderes. Hver angivet sti skal være en relative sti og vil blive fortolket i forhold til denne kildeindgangs sti. I filmønstre skelnes der mellem store og små bogstaver. En fil, der svarer til et eller flere af disse mønstre, inkluderes i den tilsvarende rod for pakkefragment, hvis ikke det ekskluderes af et eller flere af denne indgangs eksklusionsmønstre.
Se getExclusionPatterns
for at få flere oplysninger om hver enkelt mønsters syntaks og semantik. Fraværet af alle
inkluderingsmønstre svarer semantisk til det eksplicitte inkluderingsmønster
**
.
Java-projektets API isOnClasspath kontrollerer både inkluderings- og ekskluderingsmønstre, før det afgøres, om en bestemt ressource er i classpath.
Eksempler:
src/**
alene inkluderer alle filer under en rodfolder
ved navn src
.
src/**
og tests/**
inkluderer alle filer
under rodfoldere ved navn src
og tests
.
src/**
og ekskluderingsmønstret
src/**/Foo.java
inkluderer alle filer under en rodfolder ved navn
src
, undtagen dem der hedder Foo.java
.