JDT-plugin-moduler inneholder en trinnvis og satsvis Java-kompilator for bygging av *.class-filer for Java på grunnlag av kildekode. Det finnes ikke noe direkte API i kompilatoren. Den installeres som en bygger på Java-prosjekter. Kompilering utløses med plattformens standard byggemekanismer.
Plattformens standard byggemekanisme er beskrevet i detalj i Trinnvise prosjektbyggere.
Du kan programmatisk kompilere Java-kildefiler i et prosjekt med bygge-APIet.
IProject myProject; IProgressMonitor myProgressMonitor; myProject.build(IncrementalProjectBuilder.INCREMENTAL_BUILD, myProgressMonitor);
For et Java-prosjekt aktiverer dette Javas trinnvise prosjektbygger (sammen med eventuelle andre trinnvise prosjektbyggere som er lagt til i prosjektets byggespesifikasjoner). De genererte *.class-filene skrives til definert utdatamappe. Andre ressursfiler kopieres også til utdatamappen.
Ved full satsvis bygging kan alle *.class-filene i utdatamappen "renses" for å sikre at ingen filer forblir harske. Dette kontrolleres ved hjelp av en JDT-kjernebygger (CORE_JAVA_BUILD_CLEAN_OUTPUT_FOLDER). Standard for dette alternativet er å rense utdatamappene. Med mindre dette alternativet tilbakestilles, må du sørge for at du plasserer alle *.class-filer som du ikke har tilsvarende kildefiler for, i en egen klassefilmappe i klassebanen i stedet for i utdatamappen.
Trinnvise og satsvise
byggere kan konfigureres med andre alternativer som styrer hvilke ressurser som kopieres
til utdatamappen. Eksempelet nedenfor viser hvordan du konfigurerer et ressursfilter slik at filer som slutter med
'.ignore' og mapper kalt 'META-INF' ikke kopieres til utdatamappen.
Hashtable options = JavaCore.getOptions();
options.put(JavaCore.CORE_JAVA_BUILD_RESOURCE_COPY_FILTER, "*.ignore,META-INF/");
JavaCore.setOptions(options);
Filnavn filtreres bort hvis de samsvarer med et av de oppgitte mønstrene. Hele mapper filtreres bort hvis navnet deres samsvarer med et av de oppgitte mappenavnene som slutter med et baneskilletegn.
Trinnvise og satsvise byggere kan også konfigureres til bare å generere enkeltfeil når *.classpath-filen har feil. Dette alternativet er definert som standard og utelukker en rekke feil. Du finner en fullstendig liste over byggerrelaterte alternativer og deres standardverdier i Alternativer for JDT-kjernebygger.
Kompilatoren kan også konfigureres ved hjelp av JavaCore-alternativer. Du kan for eksempel definere alvorsgraden som skal brukes for forskjellige typer problemer som blir funnet under kompilering. Du finner en fullstendig liste over kompilatorrelaterte alternativer og deres standardverdier i Alternativer for JDT-kjernekompilator.
Ved programmatisk konfigurering av alternativer for bygger eller kompilatoren må du bestemme virkeområdet til alternativet. For eksempel kan konfigurering av et ressursfilter gjelde bare for et bestemt prosjekt:
Hashtable options = myProject.getOptions(false); // hent bare alternativer konfigurert i dette prosjektet options.put(JavaCore.CORE_JAVA_BUILD_RESOURCE_COPY_FILTER, "*.ignore,META-INF/"); myProject.setOptions(options);
Den satsvise kompilatorklassen befinner seg i de interne klassene til plugin-modulen
for JDT-kjerne.
Navnet på klassen er org.eclipse.jdt.internal.compiler.batch.Main. Den er pakket i plugins/org.eclipse.jdt.core_3.2.0.jar
. Siden
3.2 har den også vært tilgjengelig som separat nedlasting.
Navnet på filen er ecj.jar. Den tilhørende kilden er også tilgjengelig. Gå til
nedlastingssiden og søk
etter delen JDT Core Batch Compiler. Denne JAR-filen inneholder både den
satsvise kompilatoren og javac ant-adapteren.
Dermed kan den brukes som en frittstående applikasjon, og innenfor et Ant-bygg utenfor 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)
er en praktisk metode til å aktivere satskompilatoren i en Java-applikasjon. I stedet for
org.eclipse.jdt.internal.compiler.batch.Main.main(new
String[] {"-classpath", "rt.jar", "A.java"});
kan du ganske enkelt skrive org.eclipse.jdt.internal.compiler.batch.Main.compile("-classpath
rt.jar A.java");
Med oransje bakgrunn er dette de foreslåtte alternativene:
Navn | Bruk | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Klassebanealternativer | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-bootclasspath <dir 1>;<dir 2>;...;<dir P> | Dette er en liste over kataloger eller jar-filer som
brukes til å primærlaste klassefilene som brukes av kompilatoren. Som standard brukes bibliotekene på VM som kjøres. Oppføringer atskilles
med plattformens baneskilletegn.
Hver katalog eller fil kan angi tilgangsregler for typer mellom '[' og ']'. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-cp -classpath <dir 1>;<dir 2>;...;<dir P> |
Dette er en liste over kataloger eler jar-filer som
brukes til å kompilere kildefilene. Standardverdien
er verdien til egenskapen "java.class.path".
Oppføringer atskilles
med plattformens baneskilletegn.
Hver katalog eller fil kan angi tilgangsregler for typer mellom '[' og ']' (f.eks. [-X] for å forby tilgang til type X, [~X] for å fraråde tilgang til type X, [+p/X:-p/*] for å forby tilgang til alle typer i pakke p, men tillate tilgang til p/X). |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-extdirs <dir 1>;<dir 2>;...;<dir P> | Dette er en liste over kataloger som brukes til å angi plasseringen av zip-/jar-filer. Oppføringer atskilles med plattformens baneskilletegn. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-endorseddirs <dir 1>;<dir 2>;...;<dir P> | Dette er en liste over kataloger som brukes til å angi plasseringen av støttede zip/jar-filer. Oppføringer atskilles med plattformens baneskilletegn. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-sourcepath <dir 1>;<dir 2>;...;<dir P> | Dette er en liste over kataloger som brukes til å oppgi kildefilene. Oppføringer atskilles
med plattformens baneskilletegn.
Hver katalog kan angi tilgangsregler for typer mellom '[' og ']'. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-d <dir 1>|none | Denne brukes til å oppgi i hvilken katalog de genererte *.class-filene skal dumpes. Hvis den utelates,
opprettes ingen pakkekatalogstruktur. Hvis du ikke vil generere noen .class-filer, bruker du -d none. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-encoding <encoding name> | Spesifiserer standard kildekodingsformat (tilpasset koding kan også spesifiseres for hver enkelt fil ved at hver inndatakildefil eller -mappenavn får [<kodingsnavn>] som suffiks, for eksempel X.java[utf8]). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Samsvarsalternativer | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-target 1.1|1.2|1.3|1.4|1.5|5|5.0|1.6|6|6.0 | Spesifiserer *.class-filmålets innstilling.
Mulige alternativene er:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-1.3 | Definer samsvarsnivå til 1.3. Implisitt -source 1.3 -target 1.1. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-1.4 | Definer samsvarsnivå til 1.4 (standard). Implisitt -source 1.3 -target 1.2. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-1.5 | Definer samsvarsnivå til 1.5. Implisitt -source 1.5 -target 1.5. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-1.6 | Definer samsvarsnivå til 1.6. Implisitt -source 1.6 -target 1.6. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-source 1.3|1.4|1.5|5|5.0|1.6|6|6.0 | Dette brukes for å angi kildenivået som forventes av kompilatoren. Mulige alternativene er:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Advarselsalternativer | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-warn:allDeprecation |
Definer advarselsnivå. f.eks. -warn:unusedLocal,deprecation I rødt er standardverdiene:
-warn:none deaktiver alle advarslerdisable all warnings -warn:<warnings separated by ,> aktiver nøyaktig de opplistede advarslene -warn:+<warnings separated by ,> aktiver tilleggsadvarsler -warn:-<warnings separated by ,> deaktiver spesifikke advarsler
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-nowarn | Ingen advarsel (tilsvarer -warn:none) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-deprecation | Tilsvarer -warn:deprecation. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Feilsøkingsalternativer | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-g[:none|:lines,vars,source] | Definer feilsøkingsattributtnivå
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-preserveAllLocals | Be eksplisitt kompilatoren om å bevare alle lokale variabler (til feilsøkingsformål). Utelates denne, vil kompilatoren fjerne ubrukte lokale. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Ignorerte alternativer (for kompatibilitet med javac-alternativer) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-J<alternativ> | overfør alternativ til den virtuelle maskinen | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-X<alternativ> | angi ikke-standard alternativ. -Xemacs blir ikke ignorert. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-X | skriv ut ikke-standard alternativer og avslutt | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-O | optimaliser for utføringstid | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Avanserte alternativer | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
@<file> | Les kommandolinjeargumenter fra fil | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-maxProblems <n> | Maks antall problemer per kompileringsenhet (100 er standard) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-log <filnavn> | Oppgi en loggfil der alle utdata fra kompilatoren dumpes. Dette er svært nyttig hvis du vil feilsøke satskompilatoren eller hente en fil som inneholder alle feil og advarsler fra en satsvis bygging. Hvis filtypen er .xml, vil den genererte loggen være en xml-fil. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-Xemacs | Bruk emacs-stil for å presentere feil og advarselplasseringer i konsollen og
regulære tekstlogger. XML-logger blir ikke påvirket av dette alternativet. Hvis dette
alternativet er aktivert, vil meldingen:
2. WARNING in /workspace/X.java vises som:
/workspace/X.java:8: warning: The method... |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-proceedOnError | Fortsett kompilering ved feil, idet klassefiler med problemmetoder eller problemtyper dumpes. Dette anbefales bare hvis du ønsker å kunne kjøre applikasjonen selv om det er gjenværende feil. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-verbose | Skriv ut brukte/behandlede kompileringsenheter i konsollen eller loggfilen om spesifisert. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-referenceInfo | Beregn referanseinfo. Nyttig bare om koblet til byggeren. Referanseinfo er ubrukelig ellers. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-progress | Vis fremdrift (bare i -log-modus). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-time | Vis hastighetsinformasjon. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-noExit | Ikke kall opp System.exit(n) ved avslutningen av kompileringen n=0 hvis det ikke er feil). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-repeat <n> | Gjenta kompileringsprosess <n> ganger (utfør analyse). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-inlineJSR | Bygg inn JSR-bytekode (implisitt hvis mål >= 1.5). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-enableJavadoc | Vurder referanser i javadoc | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Hjelpealternativer | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-? -help | Vis hjelpemeldingen. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-v -version | Vis byggenummeret til kompilatoren. Svært nyttig ved rapportering av feil. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-showversion | Vis byggenummeret til kompilatoren og fortsett. Svært nyttig ved rapportering av feil. |
d:\temp -classpath rt.jar -time -g -d d:/tmp
|
Kompilerer alle kildefiler i d:\temp og undermapper. Klassebanen er bare rt.jar. Den genererer alle feilsøkingsattributter, og alle genererte *.class-filer dumpes i d:\tmp. Kompilatorens hastighet blir vist så snart satsprosessen er fullført. |
d:\temp\Test.java -classpath d:\temp;rt.jar -g:none
|
Kompilerer bare Test.java og eventuelle avhengige filer fra d:\temp. Klassebanen er d:\temp fulgt av rt.jar, hvilket betyr at alle nødvendige klasser søkes først i d:\temp og deretter i rt.jar. Den genererer ingen feilsøkingsattributter, og alle genererte .class-filer dumpes 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>Syntaksen som brukes til Javac-Ant-oppgaven, kan du finne i Ant-Javac-oppgavedokumentasjonen. Gjeldende adapter støtter Javac-Ant -oppgave versjon 1.4.1 til og med 1.6.5.
Hvis du bruker en versjon over 1.5.0, kan du bruke det nestede kompilatorargumentelementet til å spesifisere kompilatorspesifikke alternativer.
... <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> ...
For å forebygge kompilatorspesifikke skripter anbefaler vi at du bruker
kompilatorargumentet satt til org.eclipse.jdt.core.JDTCompilerAdapter
.
Hvis dette ikke er definert, kan skriptet brukes bare med Eclipse-kompilatoren. Hvis det er definert, ignoreres det nestede kompilatorargumentet dersom navnet er forskjellig fra kompilatornavnet spesifisert ved egenskapen build.compiler
.
JDT-kjernen definerer et spesialisert merke (merketype "org.eclipse.jdt.core.problem") til å betegne kompileringsproblemer. Hvis du vil oppdage problemer som kompilatoren finner, programmatisk, kan du brukes den standard plattformmerkeprotokollen. Du finner en oversikt over bruk av merker i Ressursmerker.
Følgende snutt finner alle Java-problemmerker 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-problemmerker vedlikeholdes av Java-prosjektbyggeren og fjernes automatisk idet problemer løses og Java-kilden kompileres.
Problem-ID-verdien defineres som en av konstantene som er definert i IProblem . Problemets ID er pålitelig, men meldingen er lokalisert og kan derfor endres avhengig av standard språkmiljø. Konstanter som er definert i IProblem, er selvforklarende.
En implementering av IProblemRequestor
bør defineres for å samle inn problemer som oppdages under en Java-operasjon. Arbeidskopier kan avstemmes
mot problemoppdaging hvis en
IProblemRequestor
er oppgitt for arbeidskopiopprettelse. For å gjøre det kan du bruke
metoden reconcile. Her er et eksempel:
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 legge til en handling i de rapporterte problemene i metoden
acceptProblem(IProblem). I dette eksempelet vil det rapporterte problemet være at
Zork kan ikke løses, eller det er ikke en gyldig superklasse, og IDen er IProblem.SuperclassNotFound.
SuppressWarnings
Java 5.0 gir deg muligheten til å deaktivere
kompileringsadvarsler som gjelder et delsett av en kompileringsenhet
med annotasjonen java.lang.SuppressWarning
.
@SuppressWarning("unused") public void foo() { String s; }
Uten annotasjonen ville kompilatoren gi en advarsel om at den
lokale variabelen s
aldri blir brukt.
Med annotasjonen ignorerer kompilatoren denne advarselen lokalt i
foo
-metoden. Dette gjør at advarslene kan beholdes på
andre steder i den samme kompileringsenheten eller det samme
prosjektet.
Listen over symboler som kan brukes i en SuppressWarning
-annotasjon er: