wake-up-neo.net

M2E und maven generierte Quellordner als Eclipse-Quellordner

Ich habe ein Maven-Projekt in Eclipse und Maven-Ziele, die Annotationsprozessoren ausführen, um Code zu generieren. Der Ausgabeordner für diesen Code lautet target/generated-sources/apt.

Damit Eclipse diesen generierten Code sehen kann, muss ich dem Eclipse-Projekt target/generated-sources/apt als Quellordner hinzufügen.

Dies führt jedoch zu einem Fehler des Typs "Maven Configuration Problem"

Die Projektkonfiguration ist mit pom.xml nicht auf dem neuesten Stand. Projekt ausführen Konfigurationsaktualisierung

Ich glaube, ich verstehe, warum dies der Fall ist, da Eclipse andere Quellordner hat als Maven. Aber ich brauche dieses andere Set, da ich Eclipse brauche, um die erzeugten Quellordner sehen zu können ...

Wenn Sie einen reinen Maven erstellen, werden diese Quellordner von Maven in das Build aufgenommen.

Übrigens, ich habe ein Upgrade auf die offizielle Eclipse-Version des maven Eclipse-Plugins, m2e 1.0 - durchgeführt - was früher m2Eclipse war. Ich würde gerne wissen, ob ich mit dem m2e-Plugin eine Lösung finden kann, bevor ich zur alten m2Eclipse-Version zurückkehren muss.

84
Michael Wiles

Sie müssen das Quellverzeichnis mit dem build-helper-plugin anhängen.

So wie:

 <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>add-source</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>add-source</goal>
            </goals>
            <configuration>
                <sources>
                    <source>${project.build.directory}/generated-sources/Java/</source>
                </sources>
            </configuration>
        </execution>
    </executions>
 </plugin>

Sie müssen auch:

  • Installieren Sie den "Apt M2E Connector" vom Eclipse Marketplace . Klicken Sie dazu in der Registerkarte "Übersicht" Ihrer pom.xml auf den Fehler und wählen Sie "Entdecken". 
  • Stellen Sie sicher, dass keine Plugin-Ausführungsfilter für das Build-Helper-Maven-Plugin vorhanden sind (siehe https://www.Eclipse.org/m2e/documentation/m2e-execution-not-covered.html ).
102
Michael-O

Klicken Sie mit der rechten Maustaste auf die Fehlermeldung:

Projektkonfiguration ist mit pom.xml nicht auf dem neuesten Stand. Projekt ausführen Konfigurationsaktualisierung

wählen Sie in der Problemansicht Quick Fix und klicken Sie auf Finish , um die Standardeinstellung Update-Projektkonfiguration auszuwählen. Das behebt es.

80
peter

Nachdem ich zu neuen Versionen von m2e/maven/apt gewechselt habe, hatte ich Builder-Fehler wegen der doppelten Dateien, die durch den hinzugefügten Buildpfad durch den Buildhelper verursacht wurden. Daher musste ich die "apt-generated" -Folders vom Buildhelper entfernen.

Um das Problem in Eclipse zu beheben, den "apt-generated" -Ordner nicht über Update Maven Configuration in M2E hinzuzufügen, habe ich ein M2E-Plugin geschrieben, um dieses Problem zu beheben. Es fügt die im Maven-apt-plugin konfigurierten outputDirectories zum Buildpfad des Projekts hinzu.

https://apt-m2e.googlecode.com

4
Stefan Wo

In m2e 1.0 hat sich die Handhabung von Maven-Plugins geändert. Möglicherweise fehlt eine spezifische m2e-Erweiterung für Ihr Codegenerierungs-Plugin. Hier ist die Dokumentation die ich gefunden habe.

Dieser Fehlerbericht kann auch relevant sein.

3
Nicola Musatti

https://bugs.Eclipse.org/bugs/show_bug.cgi?id=350081

anfrage an CXF JIRA (siehe 1 ), um Lebenszykluszuordnungen im cxf-codegen-plugin selbst hinzuzufügen. Dies würde m2e 1.1 erfordern, aber ich glaube, es ist ein besserer Ansatz als das Erstellen von Connectors außerhalb des cxf-Projekts. Es wird angenommen, dass sich die API für das Lebenszyklus-Mapping weniger häufig ändert als cxf-codegen-plugin und cxf.

1

Ich fand es gut, dass Spring 3.1.1 funktioniert, das auch die Version 3.0.6 enthält. Nachdem ich die Plugins eingerichtet und in den richtigen Bereich des POMs eingefügt und Argline und Endorseddirs eingefügt habe, um die Java-Quellen in den Ordner target/generated-sources/cxf ausgeben zu lassen, wurden die Quellen in Ordnung erzeugt.

....

 <properties>...

   <dependencyManagement>
      <dependencies>.....
   </dependencyManagement>

<dependencies>
   <dependency>....

</dependencies>



<!-- *************************** Build process ************************************* -->
<build>
    <finalName>eSurety</finalName>
    <plugins>
        <!-- Force Java 6 -->
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
        <!-- Deployent on AS from console
        <plugin>
            <groupId>org.jboss.as.plugins</groupId>
            <artifactId>jboss-as-maven-plugin</artifactId>
            <version>${version.jboss.as.maven.plugin}</version>
        </plugin>
        -->

        <!-- wildbill added Tomcat plugin -->
        <plugin>
            <groupId>org.Apache.Tomcat.maven</groupId>
            <artifactId>Tomcat7-maven-plugin</artifactId>
            <version>2.0</version>              
        </plugin>

        <!-- Surefire plugin before 2.9 version is buggy. No need to declare here,
              it's being referenced below w/ the version
        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.12</version>
        </plugin>
        -->

        <!-- developer added these -->   
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <compilerArguments>
                    <endorseddirs>target/generated-sources/cxf</endorseddirs>
                </compilerArguments>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.12</version>
            <configuration>
                <forkMode>once</forkMode>
                <argLine>-Djava.endorsed.dirs=target/generated-sources/cxf</argLine>
            </configuration>
        </plugin>           
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <compilerArguments>
                    <endorseddirs>target/generated-sources/cxf</endorseddirs>
                </compilerArguments>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <forkMode>once</forkMode>
                <argLine>-Djava.endorsed.dirs=target/generated-sources/cxf</argLine>
            </configuration>
        </plugin>                       
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>                       
            <configuration>
                <artifactItems>
                    <artifactItem>
                        <groupId>javax.xml.bind</groupId>
                        <artifactId>jaxb-api</artifactId>
                        <version>2.2</version>
                    </artifactItem>
                    <artifactItem>
                        <groupId>javax.xml.ws</groupId>
                        <artifactId>jaxws-api</artifactId>
                        <version>2.2</version>
                    </artifactItem>
                </artifactItems>
                <outputDirectory>target/generated-sources/cxf</outputDirectory>
            </configuration>                      
        </plugin>                                                 
    </plugins>
</build>



<!-- *********************** Profiles ************************************ -->
<profiles>
    <profile>
        <!-- When built in OpenShift the 'openshift' profile will be 
            used when invoking mvn. -->
        <!-- Use this profile for any OpenShift specific customization 
            your app will need. -->
        <!-- By default that is to put the resulting archive into the 
            'deployments' folder. -->
        <!-- http://maven.Apache.org/guides/mini/guide-building-for-different-environments.html -->
        <id>projName</id>
        <build>
            <plugins>                                                   
                <plugin>
                    <groupId>org.Apache.cxf</groupId>
                    <artifactId>cxf-codegen-plugin</artifactId>
                    <version>2.5.2</version>                        
                    <executions>
                        <execution>
                            <id>process-sources</id>
                            <phase>generate-sources</phase>                                                                                               
                            <configuration>
                                <fork>once</fork>
                                <additionalJvmArgs>-Djava.endorsed.dirs=target/generated-sources/cxf</additionalJvmArgs>                                          
                            </configuration>
                            <goals>                             
                                <goal>wsdl2Java</goal>
                            </goals>
                        </execution>
                    </executions>                       
                    <dependencies>
                        <dependency>
                           <groupId>com.Sun.xml.bind</groupId>
                           <artifactId>jaxb-impl</artifactId>
                           <version>2.2</version>
                        </dependency>
                        <dependency>
                           <groupId>com.Sun.xml.bind</groupId>
                           <artifactId>jaxb-xjc</artifactId>
                           <version>2.2</version>
                        </dependency>
                     </dependencies>
                </plugin>

                <!-- Actual war created in default target dir -->
                <plugin>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.2</version>                                               
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

Wenn sich Ihr wsdl-Ordner in $ {basedir}/src/main/resources befindet, wird er automatisch gefunden

Ich hoffe, das hilft! ~ Wildbill

0
WildBill

Falls Sie das Build Helper Plugin aus irgendeinem Grund nicht verwenden können, ist dies der einfachste Weg (wenn auch nicht so bequem und etwas mühsam), dass ich Folgendes gefunden habe:

  1. Trennen Sie den generierten Quellcode in ein eigenes Projekt oder Submodul.
  2. Sie sollten dieses Projekt überwiegend geschlossen halten oder nicht in Eclipse importieren, wenn Sie am übergeordneten Projekt arbeiten.
  3. Stellen Sie im übergeordneten Projekt, das den generierten Code benötigt, sicher, dass Sie jetzt über Maven pom Abhängigkeit vom generierten Quellcodeprojekt abhängen.
  4. Wenn Sie den generierten Code aktualisieren müssen, gehen Sie zum generierten Code-Projekt und führen Sie mvn install aus. Aktualisieren Sie nun das übergeordnete Projekt, indem Sie mit der rechten Maustaste klicken und Maven-> Update Project ... auswählen.

Dies funktioniert im Allgemeinen gut für Projekte, die eine semistatische Quelle für die Codegenerierung verwenden, wie SOAP WSDLs (Apache CXF) oder aus einer Datenbank generierter Code (jOOQ). Für APT und anderen AspectJ-ähnlichen Code funktioniert es nicht so gut, da Sie die Quelle häufig bearbeiten.

0
Adam Gent

Sie können auch den im Erkennungskatalog verfügbaren Buildhelper-m2e-Connector verwenden. Ich benutze Eclipse 3.7

0
Cédric Vidal

Eclipse Java EE IDE für Webentwickler . Version: Juno Service Release 1

mvn archetype:generate \
   -DarchetypeGroupId=org.codehaus.mojo \
   -DarchetypeArtifactId=gwt-maven-plugin \
   -DarchetypeVersion=2.5.0

mvn clean install

perfekt funktionieren.

Aber in Eclipse habe ich den gleichen Fehler in der Asinc-Klasse.

Drücken Sie im Projekt einfach die Taste F5. Beheben Sie dieses Problem.

0
burtsevyg