2015-10-16 6 views
6

Eclipse verwendet seinen eigenen Compiler (ECJ), um Java-Code zu kompilieren. Das Debuggen eines Programms, das mit Eclipse kompiliert wird, ist einfacher, da einfache Codeänderungen sofort angewendet werden können (durch den Hot-Code-Austausch).Verwendung von Eclipse Java Compiler (ecj) in Maven-Builds

Maven hingegen verwendet (standardmäßig) Oracle JDK, das einen unterschiedlichen Bytecode generiert, der den Austausch von HotCodes in einer Eclipse-Debugsitzung verhindert.

Also ich möchte Eclipse ECJ Compiler mit meinem Maven Build verwenden, wenn ich das Programm debuggen möchte. Ein bequemer Weg für mich wäre ein "ecj" Profil sein:

  • Compile

    $ mvn package 
    
  • Compile Snapshot mit aktiviertem Hot Code Ersatz

    $ mvn -P ecj package 
    

Auch das Profil freigeben Aktivierung kann in settings.xml oder sogar Eclipse-Projekteigenschaften angegeben werden.

Meine Fragen sind:

  1. Ist dies der richtige Weg zu gehen?
  2. Wie kann das konfiguriert werden?
  3. Kann Maven Toolchain dafür verwendet werden?

Antwort

9

It is possible, um den Standard javac Compiler zu ändern, die vom maven-compiler-plugin verwendet wird. Der Eclipse-Compiler ist im Artefakt plexus-compiler-eclipse gebündelt und wird durch Setzen von eclipse auf das compilerId-Attribut der maven-compiler-plugin deklariert.

Wenn Sie diese Änderung für einen custom profile aktivieren möchten, können Sie die folgende Konfiguration haben:

<profile> 
    <id>ecj</id> 
    <build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>3.6.0</version> 
     <configuration> 
      <compilerId>eclipse</compilerId> 
     </configuration> 
     <dependencies> 
      <dependency> 
      <groupId>org.codehaus.plexus</groupId> 
      <artifactId>plexus-compiler-eclipse</artifactId> 
      <version>2.8.1</version> 
      </dependency> 
     </dependencies> 
     </plugin> 
    </plugins> 
    </build> 
</profile> 

Das Plugin im plexus-compiler GitHub repository gehalten wird. Version 2.8.1 uses 3.11.1.v20150902-1521 of JDT, obwohl Sie Ihre eigene Version verwenden könnten, indem Sie nach der Plexus-Compiler-Abhängigkeit eine Abhängigkeit von org.eclipse.tycho:org.eclipse.jdt.core hinzufügen.

+0

Funktioniert wie ein Charme! Vielen Dank! –

+2

Gut, es funktioniert für Sie. Nur für den Fall: Ich konnte nicht finden, wo Plexus-Compiler-Eclipse beibehalten wird und als Konsequenz bin ich mir nicht sicher, ob sie Integration mit den neuesten Versionen von ecj bieten (das letzte, was ich finden konnte, war die Integration von ecj ab 201440604). Im Falle von Problemen mit dem obigen Ansatz, die JDT FAQ hat auch ein paar Hinweise (tycho-compiler-jdt für die Aufgabe zu empfehlen): https://wiki.eclipse.org/JDT/FAQ#Can_I_use_JDT_outside_Eclipse_to_compile_Java_code.3F –

Verwandte Themen