A JDT bedolgozók egy növekményes és egy kötegelt Java fordítót is tartalmaznak Java .class fájlok forráskódból összeépítéséhez. A fordító nem biztosít közvetlen API felületet. Java projektek összeépítőjeként kerül telepítésre. A fordítást a szabványos platform összeépítési mechanizmusai aktiválják.
A platform összeépítő mechanizmusának részletes leírása a Növekményes projekt összeépítők fejezetben található.
Az összeépítési API használatával egy projekt Java forrásfájlai programozási eljárással lefordíthatók.
IProject myProject; IProgressMonitor myProgressMonitor; myProject.build(IncrementalProjectBuilder.INCREMENTAL_BUILD, myProgressMonitor);
Java projekt esetében ez meghívja a Java növekményes projekt összeépítőt (minden más növekményes összeépítővel együtt, amely a projekt összeépítési meghatározásában található). Az eredményként előállított .class fájlokat a kijelölt kimeneti mappába helyezi. További erőforrásfájlokat is másol a kimeneti mappába.
Teljes kötegelt összeépítés esetében a rendszer átfésüli a kimeneti mappa minden .class fájlját, hogy kiszűrje az elévült fájlokat. Ez a JDT törzs összeépítési beállítás (CORE_JAVA_BUILD_CLEAN_OUTPUT_FOLDER) használatával vezérelhető. A beállítás alapértelmezésben kitakarítja a kimeneti mappákat. Hacsak nincs ez a beállítás alaphelyzetbe állítva, meg kell győződnie, hogy minden .class fájlt, amelyhez nincs megfelelő forrásfájl, a kimeneti mappa helyett egy az osztályútvonalon található különálló osztályfájl mappába helyez.
A növekményes és kötegelt összeépítők más paraméterekkel is
beállíthatók, amelyek vezérlik, hogy a rendszer mely erőforrásokat másol át a
kimeneti mappába. A következő példa bemutatja, hogy hogyan kell egy
erőforrás szűrőt beállítani úgy, hogy az '.ignore' végződésű fájlok és
'META-INF' nevű könyvtárak ne legyenek átmásolva a kimeneti mappába:
Hashtable options = JavaCore.getOptions();
options.put(JavaCore.CORE_JAVA_BUILD_RESOURCE_COPY_FILTER, "*.ignore,META-INF/");
JavaCore.setOptions(options);
Ha fájlnevek egyeznek valamelyik megadott mintával, akkor szűrésre kerülnek. Teljes mappák kerülnek szűrésre, ha nevük megegyezik valamelyik megadott, útvonal elválasztóval végződő mappa névvel.
A növekményes és kötegelt összeépítőket úgy is be lehet állítani, hogy a .classpath fájl hibája esetén csak egy hibát állítson elő. Ez a lehetőség alapértelmezésben be van állítva és így számos hibát kiküszöböl. Tekintse meg a JDT törzs összeépítési beállítások listáját, ahol megtalálhatja az összeépítőhöz kapcsolódó beállítások teljes listáját és a beállítások alapértékeit.
A fordítót a JavaCore beállítások használatával is be lehet állítani. Például beállítható az a súlyosság, amit a fordítás során talált különböző típusú problémákhoz kell rendelni. Tekintse meg a JDT törzs fordítási beállítások listáját, ahol megtalálhatja az fordítóhoz kapcsolódó beállítások teljes listáját és a beállítások alapértékeit.
Ha programozási eljárással állít be összeépítő vagy fordító beállításokat, akkor meg kell határoznia a beállítás hatókörét. Például egy erőforrás szűrő beállítása lehet, hogy csak egy bizonyos projektre vonatkozik. A következő példa a korábban már látott erőforrás szűrőt állítja be, de a beállítás ezúttal csak az egyedi projektre érvényes.
Hashtable options = myProject.getOptions(false); // csak az ebben a projektben beállított lehetőségeket adja meg options.put(JavaCore.CORE_JAVA_BUILD_RESOURCE_COPY_FILTER, "*.ignore,META-INF/"); myProject.setOptions(options);
A kötegelt fordító osztály aJDT/Core bedolgozó belső osztályaiban található. Tehát a plugins/org.eclipse.jdt.core mappában van, a jdtcore.jar fájlban. Az osztály neve org.eclipse.jdt.internal.compiler.batch.Main.
java -classpath org.eclipse.jdt.core_3.1.1.jar org.eclipse.jdt.internal.compiler.batch.Main
-classpath rt.jar A.java
vagy:
java -jar org.eclipse.jdt.core_3.1.1.jar -classpath rt.jar A.java
org.eclipse.jdt.internal.compiler.batch.Main.main(new
String[] {"-classpath", "rt.jar", "A.java"});
A compile(String)
metódus a kötegelt fordító Java alkalmazásban
meghívásának kényelmes módja. A
org.eclipse.jdt.internal.compiler.batch.Main.main(new
String[] {"-classpath", "rt.jar", "A.java"});
helyett elég egyszerűen
beírni a
org.eclipse.jdt.internal.compiler.batch.Main.compile("-classpath
rt.jar A.java");
kódot.
Narancssárga háttérrel ezek a javasolt beállítások.
Név | Felhasználás | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Osztályútvonal beállítások | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-bootclasspath <dir 1>;<dir 2>;...;<dir P> | Ez a lista azokról a könyvtárakról vagy jar fájlokról, amikkel a fordító betölti az osztályfájlokat. Alapértelmezésben a futó virtuális gép függvénytárai vannak használatban. A bejegyzéseket bejegyzés útvonal elválasztók választják el. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-cp -classpath <dir 1>;<dir 2>;...;<dir P> |
Ez a forrásfájlok fordításához használt könyvtárak vagy jar fájlok listája. Az alapértelmezett érték a "java.class.path" tulajdonság értéke. A bejegyzéseket bejegyzés útvonal elválasztók választják el. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-extdirs <dir 1>;<dir 2>;...;<dir P> | Ez a zip/jar kiterjesztésű fájlok helyének meghatározáshoz használt könyvtárak listája. A bejegyzéseket bejegyzés útvonal elválasztók választják el. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-sourcepath <dir 1>;<dir 2>;...;<dir P> | Ez a forrásfájlok meghatározáshoz használt könyvtárak listája. A bejegyzéseket bejegyzés útvonal elválasztók választják el. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-d <dir 1>|none | Ez az előállított .class fájlok kiíratására szolgáló
könyvtárat határozza meg. Ha nincs megadva, akkor nem jönnek létre a csomag könyvtár
szerkezetek. Ha nem kíván .class fájlokat előállítani, akkor használja a -d none beállítást. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-encoding <kódolás neve> | Adja meg az alapértelmezett forráskódolási formátumot (fájlonként is meg lehet adni egyéni kódolást: toldja meg minden egyes beviteli forrásfáj vagy -mappa nevét [encoding <kódolás neve>] taggal). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Megfelelési beállítások | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-target 1.1|1.2|1.3|1.4|1.5|5|5.0 | Ez a .class fájl célját beállítását adja meg.
A lehetséges értékek:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-1.3 | A megfelelési szintet 1.3 értékre állítja. Vonatkozó paraméterek: -source 1.3 -target 1.1. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-1.4 | A megfelelési szintet 1.4 értékre állítja (ez az alapértelmezett). Vonatkozó paraméterek: -source 1.3 -target 1.2. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-1.5 | A megfelelési szintet 1.5 értékre állítja. Vonatkozó paraméterek: -source 1.5 -target 1.5. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-source 1.3|1.4|1.5|5|5.0 | Ez a fordító forrásszintjét engedélyezi. A lehetséges értékek:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Figyelmeztetési beállítások | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-warn:allDeprecation |
Figyelmeztetési szint beállítása. pl. -warn:unusedLocals,deprecation Vörös színnel vannak az alapértelmezett beállítások.
-warn:<figyelmeztetések vesszővel elválasztva> pontosan a felsorolt figyelmeztetések engedélyezése -warn:+<figyelmeztetések vesszővel elválasztva> további figyelmeztetések engedélyezése -warn:-<figyelmeztetések vesszővel elválasztva> adott figyelmeztetések tiltása
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-nowarn | Nincs figyelmeztetés (egyenértékű a -warn:none beállítással) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-deprecation | Egyenértékű a -warn:deprecation beállítással. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Hibakeresési beállítások | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-g[:none|:lines,vars,source] | A hibakeresési jellemzők szintjének beállítása
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-preserveAllLocals | Kifejezetten kéri a fordítóprogramot, hogy őrizzen meg minden helyi változót (hibakeresés céljából). Kihagyása esetén a fordító eltávolítja a használaton kívüli helyi változókat. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
További beállítások | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
@<fájl> | Parancssori paramétereket olvas be fájlból | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-maxProblems <n> | Problémák maximális száma fordítási egységenként (alapértelmezésben 100) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-log <fájlnév> | Adjon meg egy naplófájlt, amibe kiíratva lesz a fordító minden kimenete. Ez főleg akkor hasznos, ha a kötegfordítóban keres hibát, vagy ha olyan fájlja van, aminek minden hibáját vagy figyelmeztetését kötegelt összeépítésből tartalmazza. Ha a kiterjesztés .xml, akkor az előállított napló xml fájl lesz. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-proceedOnError | Hiba esetén is folytatja a fordítást, az osztályfájlok kiíratását problémametódusokkal vagy problématípusokkal végezve. E akkor ajánlott, ha a fennmaradó hibák mellett is futtatni kívánja az alkalmazást. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-verbose | A konzolra vagy a naplófájlba nyomtatja a hozzáfért/elvégzett fordítási egységeket. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-referenceInfo | Hivatkozási információkat számít ki. Csak akkor hasznos, ha az összeépítőhöz csatlakozik. Egyébként a hivatkozási információknak semmi haszna. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-progress | Jelzi az előrehaladást (csak -log módban) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-time | Sebességinformációkat jelez ki | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-noExit | A fordítás végén nem hívja meg a System.exit(n) metódust (n=0, ha nincs hiba) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-repeat <n> | <n> alkalommal megismétli a fordítási folyamatot (teljesítményelemzés). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-inlineJSR | Beemelt JSR bytekód (implicit, ha a cél >= 1.5) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-enableJavadoc | Megfontolja a Javadoc dokumentáción belüli hivatkozásokat | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Sugó beállítások | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-? -help | Megjeleníti a súgóüzenetet | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-v -version | Megjeleníti a fordítóprogram összeépítési számát. Hiba bejelentésénél ez nagyon hasznos. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-showversion | Megjeleníti a fordítóprogram összeépítési számát, majd továbblép. Hiba bejelentésénél ez nagyon hasznos. |
d:\temp -classpath rt.jar -time -g -d d:/tmp
|
Lefordít minden forrásfájlt a d:\temp könyvtárban, valamint annak alkönyvtáraiban. Az osztályútvonal egyszerűen rt.jar. Előállít minden hibakeresési attribútumot, és minden előállított .class fájl a d:\tmp könyvtárba lesz kiíratva. A fordító sebessége a kötegelt feldolgozás befejezte után jelenik meg. |
d:\temp\Test.java -classpath d:\temp;rt.jar -g:none
|
Csak a Test.java fájlt fordítja le; az alárendelt fájlokat a d:\temp könyvtárból szerzi meg. Az osztályútvonal rt.jar és d:\temp, tehát a szükséges osztályokat először a d:\temp könyvtárban, majd a rt.jar útvonalon keresi. Semmilyen hibakeresési attribútumot nem állít elő, és minden előállított .class fájl a d:\tmp könyvtárba lesz kiíratva. |
<?xml version="1.0" encoding="UTF-8"?> <project name="compile" default="main" basedir="../."> <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/> <property name="root" value="${basedir}/src"/> <property name="destdir" value="d:/temp/bin" /> <target name="main"> <javac srcdir="${root}" destdir="${destdir}" debug="on" nowarn="on" extdirs="d:/extdirs" source="1.4"> <classpath> <pathelement location="${basedir}/../org.eclipse.jdt.core/bin"/> </classpath> </javac> </target> </project>A javac Ant feladat szintaxisa az Ant javac feladat dokumentáció leírásban található meg. Az aktuális illesztő a Javac Ant feladat 1.4.1-1.6.5-ig terjedő változatait támogatja.
Ha 1.5.0 utáni változatot használ, akkor fordítóspecifikus beállítások megadásához használhatja a beágyazott fordítóparaméter elemets.
... <javac srcdir="${root}" destdir="${destdir}" debug="on" nowarn="on" extdirs="d:/extdirs" source="1.4"> <classpath> <pathelement location="${basedir}/../org.eclipse.jdt.core/bin"/> </classpath> <compilerarg compiler="org.eclipse.jdt.core.JDTCompilerAdapter" line="-1.5 -warn:+boxing"/> </javac> ...
A fordítófüggő parancsfájlok elkerülése érdekében tanácsos a fordítóparamétert
org.eclipse.jdt.core.JDTCompilerAdapter
értékre állítani.
Ha ez nincs beállítva, akkor a parancsfájlt csak az Eclipse fordítóprogramjával
lehet használni. Ellenkező esetben, ha a név különbözik a build.compiler
tulajdonságban megadottól, akkor a beágyazott fordító paraméter figyelmen kívül
marad.
A JDT törzs meghatároz egy különleges jelzőt ( "org.eclipse.jdt.core.problem" jelző típus) fordítási problémák megjelölésére. A fordító által észlelt problémák programozási eljárással feltérképezéséhez a szabványos platform jelző protokollt kell használni. A jelző használatának áttekintéséhez tekintse meg az Erőforrás jelzők leírást.
A következő kódrészlet a fordítási egységben megtalál minden Java problémajelzőt.
public IMarker[] findJavaProblemMarkers(ICompilationUnit cu) throws CoreException { IResource javaSourceFile = cu.getUnderlyingResource(); IMarker[] markers = javaSourceFile.findMarkers(IJavaModelMarker.JAVA_MODEL_PROBLEM_MARKER, true, IResource.DEPTH_INFINITE); }
A Java problémajelzőket a Java projektösszeépítő tartja fenn és automatikusan el is távolítja, ha egy probléma megoldódik és a Java forrás újra lett fordítva.
A probléma azonosító értékét az IProblem egyik konstansa állítja be. A probléma azonosítója megbízható, de mivel az üzenet honosított, ezért az alapértelmezett területi beállítástól függően megváltoztatható. Az IProblem felületen meghatározott konstansok önleíróak.
Az
IProblemRequestor felület egy megvalósítását kell meghatározni a Java
műveletek során feltérképezett probléma összegyűjtéséhez.
Munkamásolatokat össze lehet egyeztetni a problémaészleléssel, ha a
munkamásolat létrehozás az
IProblemRequestor felülettel is el lett látva. Ennek eléréséhez a
reconcile metódust használható. Például:
ICompilationUnit unit = ..; // fordítási egység megadása
// kérdező létrehozása a feltérképezett problémák összegyűjtéséhez
IProblemRequestor problemRequestor = new IProblemRequestor() {
public void acceptProblem(IProblem problem) {
System.out.println(problem.getID() + ": " + problem.getMessage());
}
public void beginReporting() {}
public void endReporting() {}
public boolean isActive() { return true; } // akkor észlel problémákat, ha aktív
};
// használja a munkamásolatot, hogy megtartsa a hibás forrást
ICompilationUnit workingCopy = unit.getWorkingCopy(new WorkingCopyOwner() {}, problemRequestor, null);
((IOpenable)workingCopy).getBuffer().setContents("public class X extends Zork {}");
// összeegyeztetés aktiválása
workingCopy.reconcile(NO_AST, true, null, null);
Az acceptProblem(IProblem) metódusban a jelentett problémákhoz intézkedést vehet fel. A
fenti példában a jelentett probléma a Zork nem oldható fel vagy érvénytelen
szülőosztály lesz és az azonosítója IProblem.SuperclassNotFound.