2010-03-28 22 views
29

Ahora mismo, estoy escribiendo una pequeña aplicación java por mi cuenta, con algunos archivos maven pom.xml. Quiero hacer todos mis paquetes maven para compilar con jdk 1.6, y no puedo encontrar una buena manera de hacerlo sin configurarlo manualmente en cada uno de los POM. Estoy cansado de copiar y pegarconfiguración predeterminada del compilador maven

<groupId>org.apache.maven.plugins</groupId> 
<artifactId>maven-compiler-plugin</artifactId> 
<configuration> 
<source>1.6</source> 
<target>1.6</target> 
</configuration> 

en cada archivo pom.xml que genero.

¿Hay una manera más simple de resolver este problema?

Respuesta

16

Cree un proyecto pom-only (<packaging>pom</packaging>) que tenga la configuración del compilador (y cualquier otra configuración predeterminada) que desee. Puede tratarlo como cualquier otro proyecto (libérelo, impleméntelo en su repositorio de Maven, etc.).

Deja una declaración parent en la parte superior de los archivos de pom:

<parent> 
    <groupId><!-- parent's group id --></groupId> 
    <artifactId><!-- parent's artifact id --></artifactId> 
    <version><!-- parent's version --></version> 
</parent> 

No ayuda mucho si todo lo que desea ajustar la configuración del compilador. Pero si se encuentra configurando muchos complementos, informes y dependencias de la misma manera en todo el proyecto, puede crear uno principal para gobernarlos a todos.

BTW - tenga cuidado al declarar dependencies y plugins en su archivo pom padre. Por lo general, querrá favorecer dependencyManagement y pluginManagement. Ver thedocumentation para más detalles.

+0

Hasta ahora, la única solución que pude encontrar para el comportamiento irritante del eclipse m2e. Incluso después de 5 años desde esta publicación. ¿Puede ser que me falta algo en eclipse (Marte)? –

8

Puede especificar este complemento y configuración en su ~/.m2/settings.xml, que luego lo aplicará a todos los proyectos.

Sin embargo, esto tiene la desventaja de hacer que sus proyectos ya no sean portátiles: intentar construir el mismo código con el mismo pom.xml fallará en otras máquinas que no tengan los mismos valores settings.xml que usted.

+1

La referencia de maven para settings.xml no muestra una forma de configurar los complementos (http://maven.apache.org/settings.html). ¿Me estoy perdiendo de algo? Además, ya tengo un bit de entradas en el archivo settings.xml (como la propiedad "project.build.sourceEncoding" y repositorios no estándar adicionales, por lo que no es un problema para mí agregar más cosas a settings.xml. –

+0

Usted puede configurar un perfil (con activo de forma predeterminada) donde el complemento javac tiene este valor. No aparece en la lista o no se menciona en esa página de configuración pero es compatible. Consulte la configuración global en m2_home/conf/settings.xml como referencia (podría también especifique la configuración aquí) –

5

Estoy harto de copiar y pegar

Sí, y se debe utilizar POM inheritance para evitar esto y configurar el maven-compiler-plugin en el POM padres.

Otra opción sería utilizar la solución sugerida por @matt (y apuntó las ventajas y desventajas del uso de settings.xml).

En ambos casos, esto es típicamente un entorno que me gusta comprobar mediante el maven-enforcer-plugin y su regla de requireJavaVersion que configuraría como esto:

<project> 
    [...] 
    <build> 
    <plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-enforcer-plugin</artifactId> 
     <executions> 
      <execution> 
      <id>enforce-versions</id> 
      <goals> 
       <goal>enforce</goal> 
      </goals> 
      <configuration> 
       <rules> 
       <requireJavaVersion> 
        <version>1.6</version> 
       </requireJavaVersion> 
       </rules> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    [...] 
</project> 

pero se puede hacer más (como la comprobación de la versión experto) Muy útil.

3

Quiero hacer todos mis paquetes de Maven para compilar con el JDK 1,6

Si este es el proyecto de varios módulos sólo hay que poner estos ajustes a nivel superior POM bajo pluginManagement.

Si tiene muchos proyectos independientes solo copie y pegue esta configuración. Tenga cuidado con las soluciones "inteligentes" como configurar esto en algún lugar del mundo. Algún día tendrá que usar diferentes ajustes del compilador para una o dos de sus proyectos y la pesadilla comenzará :-)

recuerdo ...

mantener las cosas lo más simple posible, pero no más simple .

Cuestiones relacionadas