2008-11-06 19 views

Respuesta

226

Puede agregar un nuevo directorio de origen con la acumulación de ayudante:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>build-helper-maven-plugin</artifactId> 
      <executions> 
       <execution> 
        <phase>generate-sources</phase> 
        <goals> 
         <goal>add-source</goal> 
        </goals> 
        <configuration> 
         <sources> 
          <source>src/main/generated</source> 
         </sources> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 
+1

El único problema con este enfoque es que el artefacto final también incluye los archivos fuente java (archivos .java). ¿Hay alguna forma de excluir los archivos fuente e incluir solo los archivos .class? –

+15

solo una nota para otros (como yo), el elemento 'plugin' está en'/project/build/plugins' y NO en '/ project/build/pluginManagement/plugins' – Betlista

+1

@saravana_pc no tiene este problema ... – Lyth

29

Esto funcionó para mí

<build> 
    <sourceDirectory>.</sourceDirectory> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <configuration> 
     <includes> 
      <include>src/main/java/**/*.java</include> 
      <include>src/main2/java/**/*.java</include> 
     </includes> 
     </configuration> 
     </plugin> 
    </plugins> 
</build> 
+16

No es una buena idea en mi humilde opinión este tipo, ya que varios plugins asumen el 'sourceDirectory' - y posiblemente adicional' sources' - como las raíces de los archivos de origen. En su solución, el 'maven-compiler-plugin' es el único complemento que conoce estas raíces reales. –

+3

@Laurent Tienes razón sobre eso. Esta fue una buena idea hace un par de años, pero ahora hay opciones mucho mejores. build-helper enumerado arriba es mis opciones preferidas. – sal

+3

Esto no lo agrega al modelo de proyecto, por lo que no funcionará correctamente en IDEs. –

2

Se utiliza la acumulación de ayudante-maven-plugin desde el cargo - y actualización src/main/generado. Y mvn clean compile funciona en mi ../common/src/main/java, o en ../common, así que guardé el último. Entonces sí, confirmando que el nivel de IntelliJ IDEA (ver 10.5.2) de la compilación falló como lo mencionó David Phillips. El problema era que IDEA no agregó otra raíz de origen al proyecto. Agregarlo solucionó el problema manualmente. No es agradable, ya que editar todo en el proyecto debería provenir de maven y no de la edición directa de las opciones de proyecto de IDEA. Sin embargo, podré vivir con él hasta que admita build-helper-maven-plugin directamente de manera que agregue automáticamente las fuentes.

Luego necesitábamos otra solución para que esto funcione. Como cada vez que IDEA reimportó la configuración de maven después de un cambio de pom, la fuente recién agregada se mantuvo en el módulo, pero perdió sus selecciones de Carpetas de origen y fue inútil. Así, por IDEA - necesidad de establecer estos una vez:

  • Select - Configuración del proyecto/Maven/Importar/mantener la fuente y prueba carpetas en reimportación.
  • Agregar - Estructura del proyecto/Configuración del proyecto/Módulos/{Módulo}/Fuentes/Agregar raíz de contenido.

Ahora, mantener esas carpetas en importación tampoco es la mejor práctica en el mundo, ..., pero intentarlo.

+0

Ninguna opción funciona con IntelliJ Idea 9.0.4 que es lo que uso. No he probado las opciones de build-helper con el Eclipse reciente, pero no funcionó con 3.4 y el plugin m2 cuando lo probé. A Maven no le gustan los árboles fuente múltiples o los artefactos múltiples construidos desde el mismo proyecto, cualquier intento de evitar esta limitación suele ser un hack horrible. – sal

+0

He estado en IntelliJ durante muchos años. Y nunca cambié a eclipse, así que no puedo hablar por eso, y luego oír que generalmente también es muy bueno. Para IntelliJ La actualización de una licencia personal cada dos años es de $ 100/año. Las nuevas versiones principales suelen salir todos los años en enero. Luego, en los últimos 2 o 3 meses del año anterior, le permiten comprar la versión anterior y obtener la actualización a la próxima gratis. Esto está en marcha ahora, así que es el momento "seguro" para comprar 10 y obtener 11. Además, si no necesita JSP y otras características empresariales, use la edición gratuita de la comunidad. – arntg

11

a hacer que funcione en IntelliJ, también se puede añadir

<generatedSourcesDirectory>src/main/generated</generatedSourcesDirectory> 

a Maven-compilador-plugin

+0

Me gustaría agregar que esto también funcionó en Eclipse para agregar las fuentes generadas como una ubicación de origen en la configuración del proyecto. –

+0

Sin embargo, esta ruta parece ser para las fuentes generadas por los procesadores de anotación. Incluso si funciona, es posible que esta ruta sea manejada de manera diferente por algunos complementos. Por ejemplo, espero que este directorio se pueda eliminar cuando se ejecute 'clean'. – Kapep

1

Esto se puede hacer en dos pasos:

  • Para cada directorio de origen deberías crear tu propio módulo.
  • En todos los módulos se debe especificar el mismo directorio de construcción: ${build.directory}

Si trabaja con embarcadero comenzado (jetty:run), entonces recompilación de cualquier clase en cualquier módulo (con Maven, IDEA o Eclipse) dará lugar a Jetty's restart. El mismo comportamiento que obtendrá para los recursos modificados.

11

Esto también funciona con maven definiendo la etiqueta de recursos. Puede nombrar sus nombres de carpeta src lo que quiera.

<resources> 
     <resource> 
      <directory>src/main/java</directory> 
      <includes> 
       <include>**/*.java</include> 
       <include>**/*.properties</include> 
       <include>**/*.xml</include> 
      </includes> 
     </resource> 

     <resource> 
      <directory>src/main/resources</directory> 
      <includes> 
       <include>**/*.java</include> 
       <include>**/*.properties</include> 
       <include>**/*.xml</include> 
      </includes> 
     </resource> 

     <resource> 
      <directory>src/main/generated</directory> 
      <includes> 
       <include>**/*.java</include> 
       <include>**/*.properties</include> 
       <include>**/*.xml</include> 
      </includes> 
     </resource> 
    </resources> 
+6

http://maven.apache.org/pom.html#Resources -> 'Los recursos no son (normalmente) código. No están compilados' – SJuan76

+0

Eso es correcto. – sendon1982

43

ingenuamente hacerlo de esta manera:

+0

¿Esto todavía funciona? –

+2

Funcionó para mí :) Sin embargo, a Eclipse no parece gustarle. Parece pensar que "src/main/java, src/interfaces" es un src único, y por lo tanto lo marca como (falta). – Joel

+0

¡¡Funciona para mí en Maven 3.3.9 !!! Esta debería ser la respuesta aceptada. –

Cuestiones relacionadas