88 votos

Maven: ¿Es posible reemplazar la configuración de un plugin ya está definido por un perfil en uno de los padres POM

En un POM archivo principal de mi proyecto, tengo un perfil de la definición de algunas de las configuraciones útiles para este proyecto (de modo que no puede deshacerse de este padre POM) :

<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 me gustaría para invalidar la configuración de maven-compilador-plugin para usar jdk5 en lugar de jdk4 para la compilación de prueba-clases.

Por eso lo hice de 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 funciona ...

Incluso he tratado de omitir la configuración en regular plugin secciones de mi POM (quiero decir, no para un perfil específico, sino para toda mi POM).

¿Cuál podría ser el problema ?

Para aclarar algunas de mis requisitos :

  • No quiero deshacerme de el padre POM y el perfil (wls7) definido dentro de ella (ya que se necesitan muchas y muchos propiedades, configuraciones, ...) y que no es el proceso en mi de la empresa.
  • Una solución basada en la duplicación de el padre de POM y/o el perfil definido dentro no es una buena uno. Ya que si el responsable de
    el padre POM cambiar algo, me
    tendría que informar de ello en la mía.

Es una herencia de la materia (ampliar o reemplazar un perfil, una configuración de un nivel superior POM) por eso creo que debería ser posible con maven2.

119voto

Rolf Puntos 2966

Primordial de las configuraciones de un padre pom se puede hacer mediante la adición de la combine.self="override" de atributo para el elemento en el pom.

Pruebe a cambiar la configuración del plugin:

    <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">
            <properties>
              <fork>true</fork>
              <executable>${jdk15.executable}</executable>
              <compilerVersion>1.5</compilerVersion>
              <source>1.5</source>
              <target>1.5</target>
              <verbose>true</verbose>
            </properties>
          </configuration>
        </execution>
      </executions>
    </plugin>

Para más información sobre la sustitución de los plugins, consulte: http://maven.apache.org/pom.html

3voto

shane lee Puntos 161

yo tenía el mismo problema. Por defecto mi maven guerra plugin excluidos de un archivo html. Pero en mi aceptación-pruebas de perfil quería que este archivo incluido. Así que cuando he añadido en el maven guerra plugin de nuevo no reemplazar el valor predeterminado.

Para resolver este problema me pasa en el combine.auto atributo y funcionaba bien.

Predeterminado:

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

Prueba de aceptación del perfil:

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

1voto

Pascal Thivent Puntos 295221

Intenta desactivar el wls7 perfil (desde maven 2.0.10):

Comenzando con Maven 2.0.10, uno o más perfiles se puede desactivar mediante el la línea de comandos anteponiendo sus 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 los perfiles marcados como activeByDefault o los perfiles que de lo contrario sería activado a través de su activación config.

Y, a continuación, agregar la configuración en un perfil con un nombre diferente o directamente en su pom.xml.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: