Est-il possible de modifier la configuration d'un plugin déjà défini pour un profil dans une POM parent?

dans un fichier parent POM de mon projet, j'ai un tel profil définissant quelques configurations utiles pour ce projet (de sorte que je ne peux pas me 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 je voudrais juste passer outre la configuration du Maven-compilateur-plugin afin d'utiliser jdk5 au lieu de jdk4 pour compiler des classes de test.

C'est pourquoi j'ai fait cette section 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 surcharger la configuration dans les sections plugin régulières de mon POM (je veux dire, pas pour un profil spécifique mais pour l'ensemble de mon POM).

Quel est le problème ?

pour clarifier certaines de mes exigences:

  • Je ne veux pas me débarrasser du parent Définition de la POM et du profil (wls7) à l'intérieur (puisque j'ai besoin de beaucoup et beaucoup propriété, configuration. ,..) et ce n'est pas le processus dans ma entreprise.
  • une solution basée sur la duplication le POM parent et / ou le profil définies à l'intérieur n'est pas une bonne un. Depuis le responsable de

    le parent POM changer quelque chose, I

    aurait à le signaler dans la mienne.

c'est juste une question d'héritage (étendre ou outrepasser un profil, une configuration à partir D'un POM de niveau supérieur) donc je pense que ça devrait être possible avec Maven 2.

85
demandé sur Lii 2009-11-20 19:16:02

3 réponses

les configurations dominantes d'un pom parent peuvent être faites en ajoutant l'attribut combine.self="override" à l'élément de votre pom.

essayez de changer la configuration de votre plugin en:

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

pour plus d'informations sur les plugins dérogatoires, voir: http://maven.apache.org/pom.html

117
répondu Rolf 2015-08-06 08:58:56

j'ai eu le même problème. Par défaut, mon plugin maven war a exclu un fichier html. Mais dans mon profil d'acceptation-tests, je voulais que ce dossier soit inclus. Donc quand j'ai ajouté dans le plugin maven war encore une fois, il n'a pas outrepassé la valeur par défaut.

pour résoudre ce problème j'ai passé dans le combinat.auto attribut 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 D'essai D'acceptation:

<plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-war-plugin</artifactId>
                        <version>2.4</version>
                        <configuration combine.self="override"/>
                    </plugin>
2
répondu shane lee 2013-09-17 06:03:59

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

à partir de Maven 2.0.10, un ou plus de profils peuvent être désactivés en utilisant la ligne de commande en préfixant leur identifiant avec l'un ou l'autre des caractères '!'ou '-' comme indiqué ci-dessous:

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

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

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

1
répondu Pascal Thivent 2009-11-20 18:36:07