2009-09-26 9 views
16

Wie kann die Konfiguration des Eclipse-Projektcompilers für Java 6-Annotationsprozessoren am besten eingerichtet werden?Java 6-Annotationsverarbeitungskonfiguration für Eclipse-Compiler mit Maven konfigurieren

Meine Lösung besteht darin, die Dateien org.eclipse.jdt.apt.core.prefs und factorypath manuell einzurichten. Dies ist ein wenig umständlich:

  • Referenz der jar-Prozessor in der factorypath Datei
  • Konfigurieren Sie die Eclipse-Annotation Prozessor Ausgabeverzeichnis (org.eclipse.jdt.apt.genSrcDir Eigenschaft in org.eclipse.jdt.apt.core.prefs)
  • Fügen Sie den Prozessor Ausgabeverzeichnis eclipse Annotation als Quellordner

Ein Problem ist, dass Eclipse generierte Quellen mit Maven kompiliert werden. Nur maven clean compile ist zuverlässig, da es die von der Eclipse erzeugten Quelldateien entfernt. (Eclipse und javac erzeugte Quelldateien könnten nicht synchron sein.)

Gibt es eine bessere Lösung, um maven ohne eclipse-generierte Quelldateien am maven-Quellpfad zu konfigurieren?

<project> 
    <properties> 
    <eclipse.generated.src>${project.build.directory}/eclipse</eclipse.generated.src> 
    </properties> 
    <build> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>build-helper-maven-plugin</artifactId> 
      <version>1.4</version> 
      <executions> 
       <execution> 
        <id>add-source</id> 
        <phase>generate-sources</phase> 
        <goals> <goal>add-source</goal> </goals> 
        <configuration> 
         <sources> 
         <source>${eclipse.generated.src}</source> 
         </sources> 
        </configuration> 
       </execution> 
      </executions> 
      </plugin> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-eclipse-plugin</artifactId> 
     <configuration> 
      <additionalConfig> 
      <file> <name>.factorypath</name> 
     <content><![CDATA[<factorypath> 
    <factorypathentry kind="VARJAR" id="M2_REPO/processor/processor.jar" enabled="true" runInBatchMode="false"/> 
    </factorypath> 
    ]]>  </content> 
      </file> 
      <file> 
       <name>.settings/org.eclipse.jdt.apt.core.prefs</name> 
     <content><![CDATA[ 
    eclipse.preferences.version=1 
    org.eclipse.jdt.apt.aptEnabled=true 
    org.eclipse.jdt.apt.genSrcDir=${eclipse.generated.src} 
    org.eclipse.jdt.apt.reconcileEnabled=true 
    ]]>  </content> 
      </file> 
      </additionalConfig> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

Antwort

6

Update: Sie könnten versuchen, die apt-maven-plugin verwenden. Es bietet derzeit drei Ziele:

können Sie die Ziele konfigurieren als Teil Ihres Build laufen wie folgt:

<build> 
    ... 
    <plugins> 
    ... 
    <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>apt-maven-plugin</artifactId> 
     <version>1.0-alpha-2</version> 
     <executions> 
     <execution> 
      <goals> 
      <goal>process</goal> 
      <goal>test-process</goal> 
      </goals> 
     </execution> 
     </executions> 
    </plugin> 
    ... 
    </plugins> 
    ... 
</build> 

Standardmäßig wird das Ausgabeverzeichnis auf ${project.build.directory}/generated-sources/apt gesetzt,

Es gibt eine open Jira gegen den Compiler-Plugin Um APT-Unterstützung für Java 6 hinzuzufügen, können Sie dafür stimmen, wenn Sie dies in zukünftigen Versionen sehen möchten.

+2

Es ist nicht mehr offen, es wurde in 2.2 implementiert. – bmargulies

3

Ich verwende http://code.google.com/p/maven-annotation-plugin/, die einfacher zu konfigurieren ist. Sie können es auf zwei Arten verwenden:

  • Quellen während der Kompilierung (Konfiguration unten)
  • erzeugen Quellen "von Hand" zu src/main/erzeugt und halten sie auf SCM
 <plugin> 
      <groupId>org.bsc.maven</groupId> 
      <artifactId>maven-processor-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>process</id> 
        <goals> 
         <goal>process</goal> 
        </goals> 
        <phase>generate-sources</phase> 
        <configuration> 
         <compilerArguments>-encoding ${project.build.sourceEncoding}</compilerArguments> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 



     <plugin> 
      <groupId>org.bsc.maven</groupId> 
      <artifactId>maven-processor-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>process-test</id> 
        <goals> 
         <goal>process-test</goal> 
        </goals> 
        <phase>generate-test-sources</phase> 
        <configuration> 
         <compilerArguments>-encoding ${project.build.sourceEncoding}</compilerArguments> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 


     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.3.1</version> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
       <encoding>${project.build.sourceEncoding}</encoding> 
       <!-- Disable annotation processors during normal compilation --> 
       <compilerArgument>-proc:none</compilerArgument> 
      </configuration> 
     </plugin> 
2
erzeugen

Es gibt eine einfachere Lösung in Eclipse Juno (Ich bin mir nicht sicher über frühere Versionen). In Einstellungen/Maven/Annotation Processing gibt es drei Modi für die Annotationsverarbeitung. Es ist standardmäßig deaktiviert, aber ich habe beide anderen Optionen getestet und funktioniert wie ein Zauber für mich. Auf diese Weise müssen Sie die APT-Verarbeitung nicht für jedes Projekt konfigurieren oder ihre pom.xml ändern.

+0

Ich glaube, dass diese Funktion nicht Teil von Core Eclipse M2E ist, sondern von und nach der Installation von https://github.com/jbosstools/m2e-apt beigetragen wird. – vorburger