Angabe des Eclipse-Compilers vollständig aus _within_ build.xml

8

Als Experiment wollen wir unsere Produkte mit dem Eclipse-Java-Compiler (ecj-3.5.jar, der von eclipse.org heruntergeladen wurde) auf der Runtime-Version von Java 6 statt des JDK aufbauen, und wie ich es verstehe, ist es ein Das Hinzufügen dieses JAR-Objekts zum Klassenpfad "ant" und das Festlegen der Eigenschaft "build.compiler" auf den Adapter.

Durch Einschließen von

%Vor%

In meiner Datei build.xml und dem Aufruf von ant mit einer JRE erhalte ich den erwarteten Fehler, dass der Adapter nicht gefunden werden kann. Durch Hinzufügen von ecj-3.5.jar zum Klassenpfad im Eclipse-Panel kann ich meinen Code wie erwartet kompilieren. Ich glaube, dass die gleiche Funktionalität mit "-lib foo.jar" von der Befehlszeile mit modernen Ameisen verfügbar ist.

Nun möchte ich von innerhalb von build.xml spezifizieren, dass ich ecj-3.5.jar auf meinem Klassenpfad haben möchte, das das gleiche wie oben erfüllt. Das können wir schon mit ant-Aufgaben machen, also glaube ich, dass es möglich ist.

Die Frage ist also: Wie kann ich den von javac verwendeten Klassenpfad hinzufügen, um den Compiler only aus der Datei build.xml zu finden?

Es scheint, dass der kommende ant4eclipse 1.0 den Eclipse-Compiler enthält (wofür ich das verwenden wollte), also sollte das Aufrüsten auf dieses Problem (ab 0.5) das Problem lösen, das wir haben.

2010-09-24: Ant4Eclipse ist immer noch auf M4 ohne Angabe, wann die Veröffentlichung stattfinden wird.

2011-12-01: Wir sind jetzt von Ameise nach Maven gewandert. Die build.xml-Skripte treffen die Komplexitätswand und ein neuer Ansatz wurde benötigt. Jeder, der sich entscheiden muss, was zu tun ist - gehen Sie nicht zum ant4eclipse-Pfad, außer für triviale Projekte.

2012-11-30: Ein Jahr später ist die Maven-Erfahrung immer noch gut. Es gibt viele Eigenheiten und Veränderungen in der Denkweise, aber die meisten machen Sinn in dem Kontext. Maven kann die Compiler-Ebene für einzelne Projekte einfach angeben. Wir untersuchen ecj anstelle von javac (aus verschiedenen Gründen), aber für die meisten Zwecke funktioniert javac gut.

    
Thorbjørn Ravn Andersen 02.03.2010, 14:57
quelle

2 Antworten

11

Eine Möglichkeit besteht darin, bei Verwendung von javac einen Verweis auf ein componentdef anzugeben.

%Vor%

Eine weitere Option besteht darin, build.compiler so einzurichten, wie Sie es haben, oder das Compilerattribut für javac und dann einen Compilerklassenpfad für javac anzugeben. Dies ist eine normale pfadähnliche Struktur, die den Klassenpfad zum Laden Ihres Compileradapters enthält.

%Vor%

Weitere Informationen finden Sie in der Dokumentation javac task im Ant-Handbuch. Beachten Sie, dass diese beiden Lösungen nur ab Ant 1.8 funktionieren.

    
Mark 02.03.2010, 15:17
quelle
1

Lesen ​​Ausführen von Ant über Java . Ich denke, Sie können einen einfachen Wrapper schreiben, der einen Klassenpfad richtig setzt und Ihre jar-Datei zum resultierenden Klassenpfad hinzufügt.

Hier schneide ich einfach das Sample aus dem obigen Link mit dem Zusatz der Bibliothek, an der Sie interessiert sind, in den Klassenpfad:

%Vor%

Ich denke, Sie können sogar die gleiche Build-Datei wiederverwenden, geben Sie einfach ein anderes Ziel als Einstiegspunkt.

    
Alexander Pogrebnyak 03.03.2010 17:29
quelle

Tags und Links