M2E y tener carpetas de origen generadas por maven como carpetas de origen de eclipse

91

Tengo un proyecto maven en eclipse y tengo objetivos maven que ejecutan procesadores de anotaciones para generar código. La carpeta de salida de este código es target / generate-sources / apt.

Para que eclipse vea este código generado, necesito agregar target / generate-sources / apt como carpeta de origen al proyecto eclipse.

Sin embargo, esto hace que haya un error del tipo "Problema de configuración de Maven" que dice

La configuración del proyecto no está actualizada con pom.xml. Ejecutar la actualización de la configuración del proyecto

Creo que entiendo por qué este es el caso, ya que eclipse tiene un conjunto de carpetas de origen diferente al conjunto de maven. Pero necesito este conjunto diferente, ya que necesito eclipse para poder ver las carpetas de origen generadas ...

Al hacer una compilación pura de maven, estas carpetas de origen se incluirán en la compilación, por maven.

Por cierto, me he actualizado a la versión oficial de eclipse del complemento maven eclipse, m2e 1.0, lo que solía ser m2eclipse. Me gustaría ver si puedo encontrar una solución alternativa para esto con el complemento m2e antes de tener que volver a la versión anterior de m2eclipse.

Michael Wiles
fuente

Respuestas:

105

Debe adjuntar el directorio de origen con el complemento build-helper-plugin .

Al igual que:

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

También necesitará:

Michael-O
fuente
4
esta solución funciona muy bien cuando m2e connector for build-helper-maven-pluginse instala en Eclipse
Brad Cupit
No me funciona. ¿Puede dar más detalles sobre la configuración del complemento build-helper?
Kevin Wong
<plugin> <groupId> org.codehaus.mojo </groupId> <artifactId> build-helper-maven-plugin </artifactId> <executions> <execution> <id> add-source </id> <phase> generate- fuentes </phase> <goals> <goal> add-source </goal> </goals> <configuration> <sources> <source> $ {project.build.directory} / generate-sources / java / </source> <source> $ {project.build.directory} / jaxws / wsimport / java </source> </sources> </configuration> </execution> </executions> </plugin>
Kevin Wong
2
Con Kepler, también tuve que instalar el conector m2e para el complemento build helper maven. (Simplemente abra su pom dentro del editor maven pom de eclipse y haga clic en el enlace rojo en la parte superior).
Snicolas
1
Por lo que yo puedo decir, a partir de build-helper-maven-pluginla <version>especificada como 3.2.0(la última como de la escritura), no hay necesidad de usar Apt M2E conector. Actualmente trabajando en Eclipse IDE 2020-06, usando Maven 3.6.3 incrustado en Eclipse, y nuestros problemas con la carpeta de origen que tiene exclusiones (**) desaparecieron después de intentar agregar las rutas de directorio de las carpetas de origen. Ahora, todas las inclusiones tienen (** / *. java) en ellos.
tom_mai78101
80

Haga clic con el botón derecho en el mensaje de error:

La configuración del proyecto no está actualizada con pom.xml Ejecute la actualización de la configuración del proyecto

en la Vista de problemas, seleccione Solución rápida y haga clic en Finalizar para seleccionar la configuración predeterminada del proyecto de actualización . Esto lo arregla.

pedro
fuente
1
Esto también funciona para mí. ¿Por qué no es esta la respuesta aceptada? Parece que la respuesta aceptada hace demasiado.
Niels Basjes
14
@NielsBasjes esta no es la respuesta aceptada porque simplemente no es útil. Cuando agrega algo a la ruta de compilación en Eclipse, eso significa que ya no está sincronizado con el POM, de ahí la advertencia. Actualizar la configuración del proyecto simplemente elimina la entrada de ruta de compilación adicional, que fue el problema inicial para empezar.
Phil
4

Después de cambiar a nuevas versiones de m2e / maven / apt, ... tuve errores de construcción debido a los archivos duplicados, causados ​​por la ruta de construcción agregada por buildhelper, por lo que necesitaba eliminar las carpetas "generadas por apt" de buildhelper.

Para solucionar el problema en Eclipse, sin agregar la carpeta "generada por apt" mediante la actualización de la configuración de Maven en M2E, escribí un complemento M2E para solucionar este problema. Agrega los outputDirectories configurados en maven-apt-plugin a la ruta de compilación del proyecto.

https://apt-m2e.googlecode.com

Stefan Wo
fuente
1
desafortunadamente @Stefan Wo, su página de complementos / repositorio ahora es 404 en googlecode.com; ¿Le importaría actualizarlo, así como la entrada de Eclipse Marketplace? ver marketplace.eclipse.org/content/apt-m2e-connector
maxxyme
3

En m2e 1.0, el manejo de los complementos de Maven ha cambiado. Es posible que le falte una extensión m2e específica para su complemento de generación de código. Aquí está toda la documentación que logré encontrar.

Este informe de error también puede ser relevante.

Nicola Musatti
fuente
Supongo que m2e es nuevo y tiene un gran desarrollo destacado
Michael Wiles
2
Creo que el problema es que la simple aplicación de complementos de Maven a proyectos m2eclipse, como solía hacer m2eclipse, funcionaba la mayor parte del tiempo, pero no estaba garantizado que siempre hiciera lo correcto. El nuevo enfoque es potencialmente más sólido, pero requiere que muchos complementos de Maven tengan una contraparte m2e.
Nicola Musatti
2

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

solicitud en CXF JIRA (ver 1 ) para agregar asignaciones de ciclo de vida en el propio cxf-codegen-plugin. Esto requeriría m2e 1.1 pero creo que es un mejor enfoque que tener conectores construidos fuera del proyecto cxf, asumiendo que la API de mapeo del ciclo de vida cambiaría con menos frecuencia que cxf-codegen-plugin y cxf.

Mike Grandmaison
fuente
0

También puede utilizar el conector buildhelper m2e disponible en el catálogo de descubrimiento. Estoy usando Eclipse 3.7

Cédric Vidal
fuente
0

Eclipse Java EE IDE para desarrolladores web. Versión: Juno Service Release 1

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

mvn clean install

funciona perfectamente.

Pero en eclipse tengo el mismo error en la clase Asinc.

Simplemente presione F5 en el proyecto. Solucione este problema.

burtsevyg
fuente
0

Esto fue lo que encontré que funcionó bien con Spring 3.1.1, que también tiene la versión 3.0.6. Una vez que obtuve la configuración de los complementos y los coloqué en el área correcta del pom e incluí el argline y endorseddirs para que las fuentes de Java se coloquen en la carpeta target / generate-sources / cxf, entonces Maven generó las fuentes correctamente.

....

 <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 su carpeta wsdl está en $ {basedir} / src / main / resources, la encontrará automáticamente

¡Espero que esto ayude! ~ pico silvestre

WildBill
fuente
0

En caso de que, por alguna razón, no pueda usar el complemento de ayuda de compilación de la manera más fácil (aunque no tan conveniente y algo tediosa), he encontrado que lidiar con esto es:

  1. Separe el código fuente generado en su propio proyecto o submódulo.
  2. Querrá mantener este proyecto predominantemente cerrado o no importado a Eclipse cuando esté trabajando en el proyecto principal.
  3. En el proyecto principal que necesita el código generado, asegúrese de depender ahora del proyecto de código fuente generado a través de la dependencia de Maven pom.
  4. Cuando necesite actualizar el código generado, vaya al proyecto de código generado y ejecútelo mvn install. Ahora actualice el proyecto principal haciendo clic derecho y seleccionando Maven-> Actualizar proyecto ...

Esto generalmente funciona bien para proyectos que utilizan una fuente semiestática para la generación de código, como SOAP WSDL (Apache CXF) o código generado a partir de una base de datos (jOOQ). Para APT y otros códigos similares a AspectJ, no funciona tan bien porque está editando la fuente con frecuencia.

Adam Gent
fuente
-1

la configuración del complemento de ayuda de compilación funcionó para nosotros.

pero tenga en cuenta que la carpeta de destino siempre tiene que ser igual a la configuración del complemento que está utilizando para el procesamiento de anotaciones en sí.

por ejemplo, maven-processor-plugin usa la carpeta de destino $ {project.build.directory} / generate-sources / apt por defecto. si desea otro destino para sus archivos fuente generados, puede configurarlo mediante la etiqueta como se muestra a continuación.

<plugin>
<groupId>org.bsc.maven</groupId>
                <artifactId>maven-processor-plugin</artifactId>
                <version>2.1.1</version>
                <executions>
                    <execution>
                        <id>process</id>
                        <goals>
                            <goal>process</goal>
                        </goals>
                        <phase>process-sources</phase>
                        <configuration>
                            <defaultOutputDirectory>apt_generated</defaultOutputDirectory>
                            <processors>
                                <processor>com.any.processor.invoker</processor>
                            </processors>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
Hannes Kogler
fuente
-3

Aqui esta la solucion

  1. Abrir vista de marcador (Ventana> Mostrar vista
  2. Haga clic derecho en el mensaje de error
  3. Seleccione Solución rápida
  4. Haga clic en Finalizar
imesh
fuente