5 votes

Définir une valeur différente par profil pour une même propriété Maven

Je suis confronté à un problème avec les propriétés maven par profils. J'ai deux profils, chacun a la même propriété 'prop.key' avec des valeurs différentes. Lorsque j'appelle mvn clean package -PA -PB o mvn clean package -PB -PA les deux utilisent la même valeur ' B-1.0-SNAPSHOT '. J'utilise maven 3.0.4.

Sous mon POM :

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.test.module</groupId>
    <artifactId>test-module</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <properties>
        <prop.key>UNKNOWN</prop.key>
    </properties>

    <profiles>
        <profile>
            <id>A</id>
            <properties>
                <prop.key>A-${project.version}</prop.key>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <version>1.2</version>
                        <executions>
                            <execution>
                                <id>A</id>
                                <phase>package</phase>
                                <configuration>
                                    <tasks name="a" description="a-desc">
                                        <echo message="RUN A = ${prop.key}" level="info"/>
                                    </tasks>
                                </configuration>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>B</id>
            <properties>
                <prop.key>B-${project.version}</prop.key>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <version>1.2</version>
                        <executions>
                            <execution>
                                <id>B</id>
                                <phase>package</phase>
                                <configuration>
                                    <tasks name="b" description="b-desc">
                                        <echo message="RUN B = ${prop.key}" level="info"/>
                                    </tasks>
                                </configuration>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>

J'ai trouvé Sujet similaire mais avec le résultat inverse ! Est-ce un bug ou une fonctionnalité de maven ?

3voto

Marc von Renteln Points 663

Vous pouvez écrire mvn package -PA,B pour faire court.

Le résultat est le même : [echo] RUN A = B-1.0-SNAPSHOT et [echo] RUN B = B-1.0-SNAPSHOT

C'est le comportement correct de maven.

Une propriété ne peut avoir qu'une seule valeur spécifique par cycle. Vous pouvez écraser une "valeur par défaut" avec une version dans un profil. Mais si vous la redéfinissez dans deux profils et que vous activez les deux, l'un des profils "gagne".

Il n'est pas possible d'avoir une valeur par profil pour une seule et même propriété. Les profils n'ont pas leur propre portée de variable. Les propriétés sont toujours globales.

0voto

Terafor Points 1308

Je pense que vous obtenez ce comportement parce que le dernier paramètre du profil est sélectionné. Essayez

mvn clean package -PA,B

Véase Introduction aux profils dans Maven .

Les profils peuvent être spécifiés explicitement à l'aide de l'option CLI -P.

Cette option prend un argument qui est une liste délimitée par des virgules de de profils à utiliser. Lorsque cette option est spécifiée, aucun autre profil que ceux spécifiés dans l'argument de l'option ne sera activé.

0voto

Hino Points 56

Lorsque vous exécutez mvn package -PA,B maven lira les deux profils A et B, et les propriétés du profil le plus récent dans le fichier pom.xml seront prioritaires (B est défini en dessous de A dans pom.xml), ce qui donne le résultat suivant <prop.key>B-${project.version}</prop.key> sera utilisé.

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