Ez a szakasz leírja, hogy hogyan kell a Java összeépítési útvonalat beállítani. Az összeépítési útvonal az az osztályútvonal, amit a rendszer Java projektek (IJavaProject) összeépítéséhez használ.
Az osztályútvonal nem más, mint osztályútvonal bejegyzések IClassPathEntry) tömbje, ami leírja a rendelkezésre álló típusokat. A típusok forrás és bináris formátumban is megjelenhetnek. Az elérési útvonalon található bejegyzések rendje meghatározza az összeépítés közben a típusok feloldásához használt kikeresési rendet.
A Java összeépítési útvonalat a Java projekt elemek szerkezete is tükrözi. Egy projektben lekérdezheti a csomagtöredék gyökereket (IPackageFragmentRoot). Minden osztályútvonal bejegyzés ki van osztva legalább egy csomagtöredék gyökérhez, továbbá ezek közül mindegyik tartalmaz egy csomagtöredék halmazt.
Az összeépítési útvonal tárgyalásának nem része a tőle függetlenül meghatározható Java futási környezet útvonala. (A futási osztályútvonal tárgyalásához lásd a Java kód futtatása leírást.)
Programozási eljárással megváltoztathatja egy projekt összeépítési útvonalát a
setRawClasspath metódus használatával a megfelelő projekt Java elemen. A következő kód állítja be a projekt erőforrás osztályútvonalát:
IProject project = ... // projekt erőforrások megadása
IJavaProject javaProject = JavaCore.create(projekt);
IClasspathEntry[] newClasspath = ...;
javaProject.setRawClasspath(newClasspath, someProgressMonitor);
(Megjegyzés: A "raw" classpath (nyers osztályútvonal) kifejezés használata azt a tényt hangsúlyozza, hogy a belépési pontokat leíró változók még nem lettek feloldva.
A Java összeépítési útvonal a projekt fájlszerkezetében, egy '.classpath' nevű fájlban van tárolva. A fájl célja, hogy lehetőséget biztosítson a Java összeépítési útvonal beállításainak megosztásához forráskód lerakatokon keresztül.A sérülések elkerülése miatt, a fájlt nem szabad saját kezűleg szerkeszteni.
A JavaCore oldalon meghatározott gyári metódusok használatával lehet az osztályútvonal bejegyzéseket meghatározni. Osztályútvonal bejegyzések az alábbi objektumokra hivatkozhatnak:
Az
alábbi osztályútvonal bejegyzés példa a 'MyProject' projekt 'src' forrásmappáját jelöli meg: IClassPathEntry srcEntry = JavaCore.newSourceEntry(new Path("/MyProject/src"));
A alábbi osztályútvonal bejegyzés példa a 'MyProject' projekt 'lib' osztályfájl mappáját jelöli meg:
IClassPathEntry libEntry = JavaCore.newLibraryEntry(
new Path("/MyProject/lib"),
null, //nincs forrás
null, //nincs forrás
false); //nem exportált
A következő osztályútvonal bejegyzésnek egy forrás melléklete van:
IClassPathEntry libEntry = JavaCore.newLibraryEntry(
new Path("d:/lib/foo.jar"), // könyvtár helye
new Path("d:/lib/foo_src.zip"), //forrásarchívum helye
new Path("src"), //forrásarchívum gyökérútvonala
true); //exportált
A forrásarchívum gyökérútvonala megadja a gyökér helyét a forrásarchívumban. Ha null értékre van állítva, akkor az archív gyökere dinamikusan lesz kikövetkeztetve.
A következő osztályútvonal bejegyzés a 'MyFramework' előfeltétel projektet jelöli meg.
IClassPathEntry prjEntry = JavaCore.newProjectEntry(new Path("/MyFramework"), true); //exportált
Az automatikus osztályútvonal változó inicializáló regisztrálható, amely az org.eclipse.jdt.core.classpathVariableInitializer kiterjesztési ponton keresztül hívható meg a munkaterület indításakor.
A következő osztályútvonal bejegyzés egy függvénytárat jelöl meg, amely helyét a
'HOME' változó tartalmazza. A forrás mellékletet az 'SRC_HOME' és az 'SRC_ROOT' változók határozzák meg:
IClassPathEntry varEntry = JavaCore.newVariableEntry(
new Path("HOME/foo.jar"), // könyvtár helye
new Path("SRC_HOME/foo_src.zip"), //forrásarchívum helye
new Path("SRC_ROOT"), //forrásarchívum gyökér útvonala
true); //exportált
JavaCore.setClasspathVariable("HOME", new
Path("d:/myInstall"), null); // nincs előrehaladás
Lehetséges automatikus osztályútvonal tároló inicializáló bejegyezése, amely késleltetetten kerül meghívásra az org.eclipse.jdt.core.classpathContainerInitializer kiterjesztési ponton keresztül, amikor a tárolót meg kell kötni.
A következő osztályútvonal bejegyzés egy rendszerosztály függvénytár
tárolót jelöl meg:
IClassPathEntry varEntry = JavaCore.newContainerEntry(
new Path("JDKLIB/default"), // 'JDKLIB' tároló + 'alapérték' tipp
false); //nem exportált
JavaCore.setClasspathContainer(
new Path("JDKLIB/default"),
new IJavaProject[]{ myProject }, // érték a 'myProject' projekthez
new IClasspathContainer[] {
new IClasspathContainer() {
public IClasspathEntry[] getClasspathEntries() {
return new IClasspathEntry[]{
JavaCore.newLibraryEntry(new Path("d:/rt.jar"), null, null, false);
};
}
public String getDescription() { return "Alapvető JDK
függvénytár tároló"; }
public int getKind() { return IClasspathContainer.K_SYSTEM; }
public IPath getPath() { return new Path("JDKLIB/basic"); }
}
},
null);
Osztályútvonal forrás bejegyzésekhez kizárási mintákat lehet hozzárendelni, amely megakadályozza, hogy a forrásmappában található bizonyos erőforrások láthatók legyenek az osztályútvonalon. A minta használatával az erőforrásfa megadott részei kiszűrhetők. Minden kizárási minta útvonal relatív az osztály útvonal bejegyzéshez képest és az Ant rendszerhez hasonló minta mechanizmust használ. Kizárási minták beágyazott forrásmappák esetében is használhatók, amennyiben a külső minta kizárja a belső mintát.
A kizárási mintákról további információkat a getExclusionPatterns() metódus leírásánál találhat.
A Java projekt API isOnClasspath metódusa egyaránt ellenőrzi a tartalmazó és kizárási mintákat, mielőtt meghatározná, hogy egy bizonyos forrás az osztályútvonalon van-e vagy nem.
Megjegyzések:
IPath sourceFolder = new Path("/MyProject/src"); IPath outputLocation = sourceFolder.append("bin"); IClassPathEntry srcEntry = JavaCore.newSourceEntry( sourceFolder, // forrásmappa helyszín new Path[] { outputLocation }, // kizárt, beágyazott mappa outputLocation); // kimeneti helyszín
Az osztályútvonal forrás bejegyzéshez tartalmazási mintát is lehet rendelni. A tartalmazási minták egyértelműen meghatározzák azokat az erőforrásokat, amelyek láthatóak az osztályútvonalon. Ha tartalmazási minták nem lettek megadva, akkor a forrásbejegyzés minden erőforrásfában található fájlt magába foglal, ami a forrásbejegyzés útvonalán található. Ha legalább egy tartalmazási minta meg van adva, az azt jelenti, hogy a forrásfának csak a megadott része lesz tartalmazva. Minden megadott útvonalnak relatív útvonalnak kell lennie és a forrásbejegyzés útvonalához relatívan lesz értelmezve. A fájlmintákban a rendszer megkülönbözteti a kis- és nagybetűket.Az olyan fájlok, amelyek legalább egy mintával megegyeznek, azokat a megfelelő csomagtöredék gyökér tartalmazza, hacsak nem zárja ki a bejegyzés legalább egy kizárási mintája.
Az útvonalminták szintaxisának és szemanikájának tárgyalása a getExclusionPatterns() metódus leírása alatt található. A
tartalmazási minták hiánya szemantikailag megegyezik az explicit
**
tartalmazási mintával.
A Java projekt API isOnClasspath metódusa egyaránt ellenőrzi a tartalmazó és kizárási mintákat, mielőtt meghatározná, hogy egy bizonyos forrás az osztályútvonalon van-e vagy nem.
Példák:
src/**
tartalmazási minta önmagában tartalmaz minden a
src
nevű gyökérmappában található fájlt.
src/**
és a tests/**
tartalmazási minták a
src
és
a tests
nevű gyökérmappákban található minden fájlt tartalmaznak.
src/**
tartalmazási minta a src/**/Foo.java
kizárási
mintával együtt tartalmaz minden fájlt a src
nevű gyökérmappa alatt
kivéve a Foo.java
nevű fájlokat.