128 votes

Maven: Est-il possible de remplacer la configuration d'un plugin déjà défini pour un profil dans un POM parent

Dans un POM parent fichier de mon projet, j'ai un profil qui définit certaines configurations utiles pour ce projet (et donc que je ne peux pas vous débarrasser de ce parent 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>

Mais dans mon projet, j'aimerais juste remplacer la configuration de maven-compiler-plugin pour utiliser jdk5 au lieu de jdk4 pour la compilation de test-classes.

C'est pourquoi j'ai fait cet article dans le POM de mon projet :

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

et ça ne marche pas ...

J'ai même essayé de remplacer la configuration de plugin régulière des sections de mon POM (je veux dire, pas pour un profil spécifique, mais pour l'ensemble de mon POM).

Quel pourrait être le problème ?

Afin de clarifier certains de mes besoins :

  • Je ne veux pas de se débarrasser de la mère POM et le profil (wls7) défini à l'intérieur (car j'ai besoin de nombreuses et nombreux propriétés, configurations, ...) et ce n'est pas le processus dans ma de l'entreprise.
  • Une solution basée sur la duplication d' le POM parent et/ou le profil définies à l'intérieur n'est pas une bonne un. Car si le responsable de
    le parent POM changer quelque chose, je
    aurait à le signaler dans la mienne.

C'est juste un héritage de la matière (d'étendre ou de remplacer un profil, une configuration à partir d'un niveau supérieur POM) donc je pense que cela devrait être possible avec maven2.

162voto

Rolf Points 2966

Vous pouvez remplacer les configurations d’un pom parent en ajoutant l’attribut combine.self="override" à l’élément de votre pom.

Essayez de changer la configuration de votre plugin pour:

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

Pour plus d'informations sur le remplacement des plugins, voir: http://maven.apache.org/pom.html

7voto

shane lee Points 161

J'ai eu le même problème. Par défaut, mon plugin maven war excluait un fichier html. Mais dans mon profil de tests d'acceptation, je voulais inclure ce fichier. Ainsi, lorsque j'ai ajouté à nouveau le plugin Maven War, il ne remplaçait pas le paramètre par défaut.

Pour résoudre ce problème, j’ai passé l’attribut combine.self et a bien fonctionné.

Construction par défaut:

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

Profil du test d'acceptation:

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

1voto

Pascal Thivent Points 295221

Avez-vous essayé de désactiver le wls7 profil (depuis maven 2.0.10):

Départ avec Maven 2.0.10, un ou plusieurs profils peuvent être désactivés à l'aide de la ligne de commande en préfixant leur identifier soit par un caractère '!' ou '-' comme indiqué ci-dessous:

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

Ceci peut être utilisé pour désactiver profils marqués comme activeByDefault ou les profils qui seraient autrement activé par le biais de leur activation config.

Et puis ajouter votre configuration dans un profil avec un nom différent ou directement dans votre pom.xml.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X