2009-11-20 13 views
73

En un archivo padre POM de mi proyecto, tengo un perfil que define algunas configuraciones útiles para este proyecto (para que pueda 't deshacerse de este padre POM):Maven: ¿Es posible anular la configuración de un complemento ya definido para un perfil en un POM padre

<profile> 
<id>wls7</id> 
... 
<build> 
    <plugins> 
    <!-- use java 1.4 --> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <configuration> 
     <fork>true</fork> 
     <source>1.4</source> 
     <target>1.4</target> 
     <meminitial>128m</meminitial> 
     <maxmem>1024m</maxmem> 
     <executable>%${jdk14.executable}</executable> 
     </configuration> 
    </plugin> 
    </plugins> 
</build> 

... 
</profile> 

Pero en mi proyecto yo sólo quisiera anular la configuración del experto-compilador-plugin con el fin de utilizar JDK5 en lugar de jdk4 para la compilación de prueba-clases.

Es por eso que hice esta sección en el POM de mi proyecto:

<profiles> 
    <profile> 
    <id>wls7</id> 
     <activation> 
      <property> 
       <name>jdk</name> 
       <value>4</value> 
      </property> 
     </activation> 
    <build> 
     <directory>target-1.4</directory> 
     <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <executions> 
      <execution> 
       <id>my-testCompile</id> 
       <phase>test-compile</phase> 
       <goals> 
       <goal>testCompile</goal> 
       </goals> 
       <configuration> 
       <fork>true</fork> 
       <executable>${jdk15.executable}</executable> 
       <compilerVersion>1.5</compilerVersion> 
       <source>1.5</source> 
       <target>1.5</target> 
       <verbose>true</verbose> 
       </configuration> 
      </execution> 
      </executions> 
     </plugin> 
     </plugins> 
    </build> 
    </profile> 
       ... 
</profiles> 

y no está funcionando ...

incluso trataron de anular la configuración en las secciones de plugin regulares de mi POM (Quiero decir, no para un perfil específico sino para todo mi POM).

¿Cuál podría ser el problema?

Para aclarar algunos de mis requisitos:

  • no quiero para deshacerse del POM padres y el perfil (wls7) definido su interior (ya que necesito muchos y muchos propiedades, configuraciones, ...) y que no es el proceso en mi empresa .
  • Una solución basada en la duplicación de el POM principal y/o el perfil definido en su interior no es bueno uno. Dado que si el responsable de
    el POM padre cambia algo, I
    tendría que informarlo en la mía.

Es solo una cuestión de herencia (ampliar o anular un perfil, una configuración de un POM de nivel superior), así que creo que debería ser posible con maven2.

+0

cómo se activa el perfil wls7? –

+0

Los perfiles wls7 y wls10 son ambos "activeByDefault" en el POM principal. Pero según las necesidades del cliente, solo el wls10 o ambos están construidos por scripts (con el parámetro "-P") –

Respuesta

1

¿trató de desactivar el perfil wls7 (ya experto 2.0.10):

A partir de Maven 2.0.10, uno o más perfiles se puede desactivar usando la línea de comandos con el prefijo de su identificador con el carácter '!' o '-' como se muestra a continuación:

mvn groupId:artifactId:goal -P !profile-1,!profile-2 

Esto puede ser usado para desactivar perfiles marcados como activeByDefault o perfiles que de otro modo se activan a través de su config activación .

Y luego agregue su configuración en un perfil con un nombre diferente o directamente en su pom.xml.

+0

Como dije anteriormente, no puedo deshacerme del POM padre ya que heredé muchas configuraciones definidas para toda mi compañía en diferentes niveles en el marco. Y la duplicación de perfiles no debería ser una buena idea, porque tendría que informar los cambios en el POM principal y la mayoría de las veces no los conozco. Simplemente me gustaría sobrescribir el comportamiento solo para la compilación de clases de prueba en mi proyecto. –

+0

Vuelve a leer mi respuesta, eso no es lo que sugerí. Sugerí desactivar un perfil, no deshacerme del POM padre. Entonces, ¿por qué tendrías que informar los cambios en el pom padre? Nada te obliga a hacer eso. –

+0

Sí Pascal, gracias por su ayuda, pero el problema es que si desactivo el perfil de wls7 pierdo mucha configuración (para otros complementos, cosas generales, ...) Aún lo necesito. Y al informar los cambios, quise decir DESDE el padre POM A mi POM. Porque, con la solución que sugirió, necesitaría duplicar todo el POM padre (excepto la sección para la compilación de clases de prueba) y si el padre POM responsable cambia algo en su POM, necesito advertirme de cualquier cambio que no es el proceso actual y no es muy práctico. –

105

Se pueden hacer configuraciones anclas de un pom padre agregando el atributo combine.self="override" al elemento en su pom.

Prueba a cambiar la configuración del plugin a:

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <executions> 
     <execution> 
      <id>my-testCompile</id> 
      <phase>test-compile</phase> 
      <goals> 
      <goal>testCompile</goal> 
      </goals> 
      <configuration combine.self="override"> 
      <fork>true</fork> 
      <executable>${jdk15.executable}</executable> 
      <compilerVersion>1.5</compilerVersion> 
      <source>1.5</source> 
      <target>1.5</target> 
      <verbose>true</verbose> 
      </configuration> 
     </execution> 
     </executions> 
    </plugin> 

Para obtener más información sobre complementos sustitución, consulte: http://maven.apache.org/pom.html

+0

Parece que para Maven2.2.1 si hace esto en un perfil, no se fusiona con los complementos definidos en los perfiles principales, sino que los reemplaza.Si defines el mismo complemento directamente en la sección de compilación, funciona. Para Maven3 se resolvió como se esperaba. –

2

tuve el mismo problema. Por defecto, mi plugin maven war excluía un archivo html. Pero en mi perfil de pruebas de aceptación quería este archivo incluido. Entonces, cuando agregué el plugin maven war nuevamente, no anulé el predeterminado.

Para resolver este problema, pasé el atributo combine.self y funcionó bien. acumulación

defecto:

<plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <version>2.4</version> 
       <configuration> 
       <packagingExcludes>swagger-ui/client.html</packagingExcludes> 
       </configuration> 
      </plugin> 

Aceptación perfil de prueba:

<plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-war-plugin</artifactId> 
         <version>2.4</version> 
         <configuration combine.self="override"/> 
        </plugin> 
Cuestiones relacionadas