web-dev-qa-db-fra.com

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

Dans un fichier parent POM de mon projet, j'ai un tel profil qui définit certaines configurations utiles pour ce projet (pour que je ne puisse pas me débarrasser de ce POM parent):

<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 simplement remplacer la configuration du plug-in maven-compiler afin d'utiliser jdk5 au lieu de jdk4 pour la compilation de 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 remplacer la configuration dans les sections de plug-in classiques de mon POM (je veux dire, pas pour un profil spécifique mais pour tout mon POM).

Quel pourrait être le problème ?

Pour clarifier certaines de mes exigences:

  • Je ne veux pas me débarrasser du POM parent et du profil (wls7) défini à l'intérieur (car j'ai besoin de très nombreuses propriétés, configurations, ...) et ce n'est pas le cas dans mon entreprise.
  • Une solution basée sur la duplication du POM parent et/ou du profil défini n’est pas bonne. Depuis si le responsable de
    Le POM parent change quelque chose, je
    devra le signaler dans le mien.

C’est juste un problème d’héritage (étendre ou remplacer un profil, une configuration d’un POM de niveau supérieur), donc je pense que cela devrait être possible avec Maven 2.

98
Guillaume Cernier

Vous pouvez remplacer les configurations d’un pom parent en ajoutant le combine.self="override" attribut à 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">
            <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 le remplacement des plugins, voir: http://maven.Apache.org/pom.html

130
Rolf

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>
5
shane lee

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

À partir de Maven 2.0.10, un ou plusieurs profils peuvent être désactivés à l'aide de la ligne de commande en préfixant leur identificateur avec le caractère '!'. ou '-' comme indiqué ci-dessous:

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

Cela peut être utilisé pour désactiver les profils marqués comme activeByDefault ou ceux qui seraient autrement activés via leur configuration d'activation.

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

2
Pascal Thivent