web-dev-qa-db-fra.com

M2E et avoir maven généré des dossiers sources en tant que dossiers sources Eclipse

J'ai un projet maven dans Eclipse et des objectifs maven qui exécutent des processeurs d'annotation pour générer du code. Le dossier de sortie de ce code est target/généré-sources/apt.

Pour qu'Eclipse voie ce code généré, je dois ajouter cible/générer-sources/apt en tant que dossier source au projet Eclipse.

Cependant, cela provoque une erreur de type "Problème de configuration Maven" disant

La configuration du projet n'est pas à jour avec pom.xml. Exécuter le projet mise à jour de la configuration

Je pense que je comprends pourquoi c'est le cas car Eclipse a un ensemble de dossiers source différent de celui de maven. Mais j'ai besoin de cet ensemble différent, car j'ai besoin d'Eclipse pour pouvoir voir les dossiers source générés ...

Lorsque vous créez un maven pur, ces dossiers sources seront inclus dans la construction, par maven.

en passant, je suis passé à la version officielle Eclipse du plugin maven Eclipse, m2e 1.0 - ce qui était m2Eclipse. J'aimerais voir si je peux trouver une solution de contournement/une solution à ce problème avec le plugin m2e avant de revenir à l'ancienne version de m2Eclipse.

84
Michael Wiles

Vous devez attacher le répertoire source avec build-helper-plugin .

Ainsi:

 <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>

Vous devrez également:

102
Michael-O

Cliquez avec le bouton droit sur le message d'erreur:

La configuration du projet n'est pas à jour avec pom.xml. Exécutez le projet mise à jour de la configuration

dans la vue Problèmes et sélectionnez Réparation rapide et cliquez sur Terminer pour sélectionner le paramètre par défaut Mettre à jour la configuration du projet . Cela corrige le problème.

80
peter

Après avoir basculé vers les nouvelles versions de m2e/maven/apt, ... j’avais des builderrors à cause des fichiers dupliqués, causés par le chemin de construction ajouté par le buildhelper, j’avais donc besoin de supprimer les dossiers "apt-généré" du buildhelper.

Pour résoudre le problème dans Eclipse, sans ajouter le dossier "généré par l'apt" via la configuration de mise à jour Maven dans M2E, j'ai écrit un plug-in M2E pour résoudre ce problème. Il ajoute les répertoires de sortie configurés dans le plugin maven-apt au chemin de construction du projet.

https://apt-m2e.googlecode.com

4
Stefan Wo

Dans m2e 1.0, la manipulation des plugins Maven a changé. Il se peut que vous manquiez d’une extension M2E spécifique pour votre plugin générateur de code. Voici toute la documentation j'ai réussi à trouver.

Ce rapport de bogue peut également être pertinent.

3
Nicola Musatti

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

demande sur CXF JIRA (voir 1 ) d’ajouter des mappages de cycles de vie dans le plugin cxf-codegen lui-même. Cela nécessiterait m2e 1.1 mais je pense que c'est une meilleure approche que d'avoir des connecteurs construits en dehors du projet cxf, en supposant que l'API de mappage du cycle de vie changerait moins souvent que cxf-codegen-plugin et cxf.

1
Mike Grandmaison

C’est ce que j’ai trouvé qui fonctionnait bien avec Spring 3.1.1 qui contient également la version 3.0.6. Une fois que j'ai configuré les plugins et les ai placés dans la bonne zone du pom et que j'ai inclus les noms de répertoires et d'endossements, les sources Java ont été placées dans le dossier target/généré-sources/cxf, puis maven a généré les sources.

....

 <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>

Si votre dossier wsdl est dans $ {basedir}/src/main/resources, il le trouvera automatiquement.

J'espère que cela aide! ~ Wildbill

0
WildBill

Dans le cas où, pour une raison quelconque, vous ne pouvez pas utiliser le plug-in d'aide à la construction de la manière la plus simple (bien que cela ne soit pas aussi pratique et un peu fastidieux), j'ai constaté que:

  1. Séparez le code source généré dans son propre projet ou sous-module.
  2. Vous souhaiterez que ce projet reste principalement fermé ou non importé dans Eclipse lorsque vous travaillez sur le projet parent.
  3. Dans le projet parent qui a besoin du code généré, assurez-vous de dépendre maintenant du projet de code source généré via la dépendance Maven pom.
  4. Lorsque vous devez mettre à jour le code généré, accédez au projet de code généré et exécutez mvn install. Maintenant, actualisez le projet parent en cliquant avec le bouton droit de la souris et en sélectionnant Maven-> Mettre à jour le projet ...

Cela fonctionne généralement bien pour les projets qui utilisent une source semi-statique pour la génération de code telle que les WSDL SOAP (Apache CXF) ou le code généré à partir d'une base de données (jOOQ). Pour APT et d'autres codes similaires à AspectJ, cela ne fonctionne pas aussi bien car vous modifiez fréquemment la source.

0
Adam Gent

Vous pouvez également utiliser le connecteur buildhelper m2e disponible dans le catalogue de reconnaissance. J'utilise Eclipse 3.7

0
Cédric Vidal

Eclipse Java EE IDE pour les développeurs Web . Version: Juno Service Release 1

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

mvn clean install

fonctionne parfaitement.

Mais dans Eclipse, j'ai la même erreur sur la classe Asinc.

Appuyez simplement sur F5 sur le projet. Résoudre ce problème.

0
burtsevyg