JDT-insticksprogrammen innehåller en inkrementell och batch Java-kompilator för byggande av Java .class-filer från källkod. Det finns inget direkt API som tillhandahålls av kompilatorn. Det installeras som en byggare på Java-projekt. Kompileringen aktiveras av vanliga plattformsbyggmekanismer.
Plattformsbyggmekanismer beskrivs utförligt i Inkrementella projektbyggare .
Du kan programmatiskt kompilera Java-källfilerna till ett projekt med hjälp av bygg-API:t.
IProject myProject; IProgressMonitor myProgressMonitor; myProject.build(IncrementalProjectBuilder.INCREMENTAL_BUILD, myProgressMonitor);
För ett Java-projekt som anropar den inkrementella Java-projektbyggaren (tillsammans med andra inkrementella projektbyggare som har lagts till i projektets byggspecifikation). De genererade klassfilerna skrivs till den angivna utdatamappen. Ytterligare resursfiler kopieras även till utdatamappen.
Vid ett fullständigt batchbygge kan det hända att alla klassfiler i utdatamappen rensas för säkerställa att inga gamla filer finns kvar. Detta styrs av ett alternativ i JDT Core Builder (CORE_JAVA_BUILD_CLEAN_OUTPUT_FOLDER). Standardvärdet för detta alternativ är att rensa utdatamappar. Såvida detta alternativ inte återställs, måste du se till att placerar alla klassfiler för vilka du inte har motsvarande källfiler i en separat klassfilsmapp i classpath istället för i utdatamappen.
De inkrementella byggarna och batchbyggarna kan konfigureras med andra alternativ som styr vilka resurser som kopieras till utdatamappen. Följande exempel visar hur du konfigurerar ett resursfilter så att filer som slutar med '.ignore' och mappar med namnet 'META-INF' inte kopieras till utdatamappen:
Hashtable options = JavaCore.getOptions();
options.put(JavaCore.CORE_JAVA_BUILD_RESOURCE_COPY_FILTER, "*.ignore,META-INF/");
JavaCore.setOptions(options);
Filnamn filtreras bort om de matchar ett av de angivna mönstren. Hela mappar filtreras bort om deras namn matchar ett an de angivna mappnamnen som slutar med en sökvägsavgränsare.
De inkrementella byggarna och batchbyggarna kan även konfigureras till att enbart generera ett enda fel när .classpath-filen innehåller fel. Det här alternativet anges som standard och eliminerar flera fel. Mer information om byggrelaterade alternativ och deras standardvärden finns i JDT Core-byggalternativ.
Kompilatorn kan även konfigureras med JavaCore-alternativ. Ett exempel: du kan definiera den stränghet som ska användas för olika typer av problem som påträffas under kompilering. Mer information om kompileringsrelaterade alternativ och deras standardvärden finns i JDT Core-alternativ för kompilering.
När du konfigurerar alternativ för byggaren eller kompilatorn programmatiskt, bör du ange omfattningen för alternativet. Ett exempel: om du konfigurerar ett resursfilter kanske det bara gäller ett visst projekt.
Hashtable options = myProject.getOptions(false); // get only the options set up in this project options.put(JavaCore.CORE_JAVA_BUILD_RESOURCE_COPY_FILTER, "*.ignore,META-INF/"); myProject.setOptions(options);
Batchkompilatorklassen finns i de interna klasserna i JDT Core-insticksprogrammet. Namnet på klassen är org.eclipse.jdt.internal.compiler.batch.Main. Den
är paketerad i plugins/org.eclipse.jdt.core_3.2.0.jar
. Detta därför att 3.2, också är tillgängligt som separat inläsning.
Filen heter ecj.jar. Dess motsvarande källa är också tillgänglig. Du får tag i dem genom att gå till hämtningssidan och
söker efter avsnittet JDT Core Batch Compiler. Denna jar innehåller batch-kompilatorn och javac-ant-adaptern.
Därför kan den användas som fristående tillämpning och inuti ett ant-bygge utanför Eclipse.
java -classpath org.eclipse.jdt.core_3.2.0.jar org.eclipse.jdt.internal.compiler.batch.Main
-classpath rt.jar A.java
eller:
java -jar org.eclipse.jdt.core_3.2.0.jar -classpath rt.jar A.java
org.eclipse.jdt.internal.compiler.batch.Main.main(new
String[] {"-classpath", "rt.jar", "A.java"});
Metoden compile(String)
är ett bekvämt sätt att anropa batchkompilatorn i en Java-tillämpning. Istället för org.eclipse.jdt.internal.compiler.batch.Main.main(new
String[] {"-classpath", "rt.jar", "A.java"});
kan du skriva org.eclipse.jdt.internal.compiler.batch.Main.compile("-classpath
rt.jar A.java");
Med orange bakgrund, dessa är föreslagna alternativ.
Namn | Användning | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Classpath-alternativ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-bootclasspath <dir 1>;<dir 2>;...;<dir P> | Det här är en lista med kataloger eller jar-filer som används för bootstrap-inläsning av de klassfiler som används av kompilatorn. Som standard används biblioteken i den VM som är igång. Poster avgränsas med plattformssökvägens avgränsare.
Varje katalog eller fil kan ange accessregler för typer mellan "'[' och ']". |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-cp -classpath <dir 1>;<dir 2>;...;<dir P> |
Det här är en lista med kataloger eller jar-filer som används till att kompilera källfilerna. Standardvärdet är värdet för egenskapen "java.class.path". Poster avgränsas med plattformssökvägens avgränsare.
Varje katalog eller fil kan ange accessregler för typer mellan "'[' och ']" (t.ex. [-X] för att förbjuda access till typ X, [~X] inte uppmuntra access till typ X, [+p/X:-p/*] förbjuda access till alla typer i paket p men tillåta access till p/X). |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-extdirs <dir 1>;<dir 2>;...;<dir P> | Det här är en lista med kataloger som används till att ange platsen för tilläggets zip-/jar-filer. Poster avgränsas med plattformssökvägens avgränsare. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-endorseddirs <dir 1>;<dir 2>;...;<dir P> | Det här är en lista med kataloger som används till att ange platsen för godkända zip-/jar-filer. Poster avgränsas med plattformssökvägens avgränsare. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-sourcepath <dir 1>;<dir 2>;...;<dir P> | Det här är en lista med kataloger som används till att ange källfilerna. Poster avgränsas med plattformssökvägens avgränsare.
Varje katalog kan ange accessregler för typer mellan "'[' och ']". |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-d <dir 1>|none | Detta används till att ange i vilken katalog de genererade klassfilerna ska dumpas. Om värdet utelämnas, skapas ingen paketkatalogstruktur. Om du inte vill generera någon klassfil alls, använder du -d none. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-encoding <encoding name> | Ange standardformat för källkodning (anpassad kodning kan även anges på filbas genom att ange olika suffix för indatakällfiler/mappnamn med [<kodningsnamn>], t.ex. X.java[utf8]). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Kompatibilitetsalternativ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-target 1.1|1.2|1.3|1.4|1.5|5|5.0|1.6|6|6.0 | Detta ange klassfilens målinställning.
Möjliga värden är:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-1.3 | Ange kompatibilitetsnivå till 1.3. Implicit -source 1.3 -target 1.1. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-1.4 | Ange kompatibilitetsnivå till 1.4 (standard). Implicit -source 1.3 -target 1.2. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-1.5 | Ange kompatibilitetsnivå till 1.5. Implicit -source 1.5 -target 1.5. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-1.6 | Ange kompatibilitetsnivå till 1.6. Implicit -source 1.6 -target 1.6. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-source 1.3|1.4|1.5|5|5.0|1.6|6|6.0 | Den används till att specificera den källnivå som kompilatorn förväntar sig. Möjliga värden är:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Varningsalternativ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-warn:allDeprecation |
Ange varningsnivå. t.ex. -warn:unusedLocal,deprecation Standardinställningar anges i rött.
-warn:none avaktiverar alla varningar -warn:<varningar avgränsade med ,> aktivera exakt de avlyssnade varningarna -warn:+<varningar avgränsade med ,> aktivera ytterligare varningar -warn:-<varningar avgränsade med ,> inaktivera specifika varningar
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-nowarn | Ingen varning (motsvarande -warn:none) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-deprecation | Motsvarande -warn:deprecation. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Felsökningsalternativ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-g[:none|:lines,vars,source] | Ange nivån för felsökningsattribut
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-preserveAllLocals | Explicit begäran till kompilatorn att behålla alla lokala variabler (i felsökningssyfte). Om värdet utelämnas tar kompilatorn bort oanvända lokaler. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Åsidosatta alternativ (för kompatibilitet med javac-alternativ) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-J<alternativ> | överför alternativ till den virtuella datorn | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-X<alternativ> | anger ett alternativ som inte är standard. -Xemacs åsidosätts inte. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-X | skriver alternativ som inte är standard och avslutar | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-O | optimerar för körningstid | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Avancerade alternativ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
@<file> | Läs kommandoradsargument från fil | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-maxProblems <n> | Max. antal problem per kompileringsenhet (100 som standard) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-log <filnamn> | Ange en loggfil där all utdata från kompilatorn dumpas. Detta är verkligen användbart om du vill felsöka batchkompilatorn eller få en fil som innehåller alla fel och varningar från ett batchbygge. Om tillägget är .xml, blir den genererade loggen en xml-fil. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-Xemacs | Använd emacs-stil för att presentera fel och varningsplatser i konsolen och vanliga textloggar. XML-loggar påverkas inte av alternativet. När alternativet är aktivt visas meddelandet:
2. WARNING in /workspace/X.java som:
/workspace/X.java:8: warning: The method... |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-proceedOnError | Fortsätt kompilera trots fel, dumpa klassfiler med problemmetoder eller problemtyper. Detta rekommenderas bara om du vill kunna köra tillämpningen även om det finns återstående fel. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-verbose | Skriv ut använda/bearbetade kompileringsenheter i konsolen eller loggfilen om den angetts. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-referenceInfo | Beräkna referensinformation. Detta är bara användbart om du är ansluten till byggaren. Hänvisningsinformationen är i annat fall oanvändbar. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-progress | Visa förlopp (endast i -log-läge). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-time | Visa hastighetsinformation | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-noExit | Anropa inte System.exit(n) i slutet av kompileringen (n=0 om inget fel). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-repeat <n> | Upprepa kompileringsprocessen <n> gånger (prestandaanalys). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-inlineJSR | Inbäddad JSR-bytekod (implicit om target >= 1.5). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-enableJavadoc | Behandla hänvisningar inuti javadoc. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Hjälpande alternativ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-? -help | Visa hjälpmeddelandet. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-v -version | Visa kompilatorns byggnummer. Detta är väldigt användbart för rapportering av ett programfel. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-showversion | Visa kompilatorns byggnummer och fortsätt. Detta är väldigt användbart för rapportering av ett programfel. |
d:\temp -classpath rt.jar -time -g -d d:/tmp
|
Den kompilerar alla källfiler i d:\temp och dess undermappar. Classpath är rt.jar. Den genererar alla felsökningsattribut och alla genererade klassfiler dumpas i d:\tmp. Kompilatorns hastighet visas när batchprocessen har slutförts. |
d:\temp\Test.java -classpath d:\temp;rt.jar -g:none
|
Den kompilerar bara Test.java och dess beroende filer, om sådana finns, och hämtar beroende filer från d:\temp. Classpath är d:\temp följt av rt.jar, vilket betyder att alla nödvändiga klasser söks efter först i d:\temp och sedan i rt.jar. Den genererar inga felsökningsattribut och alla genererade klassfiler dumpas i d:\temp. |
<?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>Den syntax som används för javac Ant-åtgärden finns i Ant javac task-dokumentationen. Den aktuella adaptern stöder Javac Ant-åtgärderna version 1.4.1 upp till 1.6.5.
Om du använder en version över 1.5.0 kan du använda det nästlade kompilatorargumentet element till att ange kompilatorspecifika alternativ.
... <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> ...
För att förhindra att du får kompilatorberoende skript råder vi dig att använda kompilatorargumentet angivet till org.eclipse.jdt.core.JDTCompilerAdapter
.
Om du inte anger detta, kan skriptet bara användas med Eclipse-kompilatorn. Om du anger detta, ignoreras det kapslade kompilatorargumentet om namnet skiljer sig från det kompilatornamn som anges av egenskapen build.compiler
.
JDT Core definierar en specialiserad markör (markörtyp "org.eclipse.jdt.core.problem") som anger kompileringsproblem. Om du programmatiskt vill upptäcka problem orsakade av kompilatorn, ska standardplattformens markörprotokoll användas. Se Resursmarkeringar för en översikt av markeringsanvändning.
Följande stycke letar upp alla Java-problemmarkörer i en kompileringsenhet.
public IMarker[] findJavaProblemMarkers(ICompilationUnit cu) throws CoreException { IResource javaSourceFile = cu.getUnderlyingResource(); IMarker[] markers = javaSourceFile.findMarkers(IJavaModelMarker.JAVA_MODEL_PROBLEM_MARKER, true, IResource.DEPTH_INFINITE); }
Java-problemmarkörer underhålls av Java-projektbyggaren och tas automatiskt bort när problemen löses och Java-källkoden kompileras om.
Problemets ID-värde anges av en av konstanterna som definierats i IProblem . Problemets ID är tillförlitligt, men meddelandet är lokaliserat och kan därför ändras utifrån standardspråkversionen. De konstanter som definieras i IProblem är självbeskrivande.
En implementation av
IProblemRequestor
bör definieras för att samla in de problem som upptäcks under en Java-operation.
Arbetskopior kan stämmas av med problemavkänning om en
IProblemRequestor
har tillhandahållits vid skapandet av arbetskopian. För att uppnå detta kan du använda metoden
reconcile. Exempel:
ICompilationUnit unit = ..; // get some compilation unit
// create requestor for accumulating discovered problems
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; } // will detect problems if active
};
// use working copy to hold source with error
ICompilationUnit workingCopy = unit.getWorkingCopy(new WorkingCopyOwner() {}, problemRequestor, null);
((IOpenable)workingCopy).getBuffer().setContents("public class X extends Zork {}");
// trigger reconciliation
workingCopy.reconcile(NO_AST, true, null, null);
Du kan lägga till en åtgärd för de rapporterade problemen i metoden acceptProblem(IProblem). I det här exemplet blir det rapporterade problemet att Zork inte kan tolkas eller att det inte är en giltig superklass och dess ID är IProblem.SuperclassNotFound.
SuppressWarnings
Java 5.0-användare kan inaktivera kompileringsvarningar i relation till en delmängd av en kompileringsenhet som använder anteckningen java.lang.SuppressWarning
.
@SuppressWarning("unused") public void foo() { String s; }
Utan anteckningen skulle kompilatorn klaga på att den lokala variabeln s
aldrig används.
Med anteckningen åsidosätter kompilatorn tyst varningen lokalt till metoden foo
. Det gör det möjligt
att bevara varningarna på andra platser för samma kompileringsenhet eller samma projekt.
De token som kan användas inuti en SuppressWarning
-anteckning är följande: