web-dev-qa-db-fra.com

Maven: Comment activer un profil en ligne de commande?

Ceci est un extrait de mon fichier pom.xml. J'ai essayé ce qui suit, mais le profil n'a pas été activé.

mvn clean install -Pdev1
mvn clean install -P dev1

Lorsque j'ai essayé mvn help:active-profiles, aucun profil n'a été répertorié comme actif. Si je règle <activeByDefault> pour dev1 sur true, et que je lance mvn help:active-profiles, le profil est activé.

<profile>
        <id>dev1</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.Apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <configuration>
                        <systemPropertyVariables>
                            <env>local</env>
                            <properties.file>src/test/resources/dev1.properties</properties.file>
                        </systemPropertyVariables>
                        <suiteXmlFiles>
                            <suiteXmlFile>src/test/resources/dev1.testng.xml</suiteXmlFile>
                        </suiteXmlFiles>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
    <profile>
        <id>dev2</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.Apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <configuration>
                        <systemPropertyVariables>
                            <env>local</env>
                            <properties.file>src/test/resources/dev2.properties</properties.file>
                        </systemPropertyVariables>
                        <suiteXmlFiles>
                            <suiteXmlFile>src/test/resources/dev2.testng.xml</suiteXmlFile>
                        </suiteXmlFiles>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>

Je me demande pourquoi mon profil n'est pas activé. Quelqu'un at-il rencontré un problème similaire?

51
indolent

Vous ne le verrez pas avec

mvn help:active-profiles

car il n'y a pas de -Pdev1 dans la commande.

Vous le verriez avec mvn help:active-profiles -Pdev1 (mais cela n'a évidemment aucun sens).

Les commandes que vous avez montrées:

mvn clean install -Pdev1
mvn clean install -P dev1

sont corrects. Le problème est probablement pas que le profil n'est pas activé, mais plutôt qu'il ne fait pas ce que vous attendez.

Pour vous assurer que c'est bien le cas, vous pouvez définir activeByDefault sur true sur le profil, puis lancer mvn help:active-profiles pour voir qu'il est activé, puis lancer mvn install et cocher si le profil fait ce que vous attendez (ce qui encore n'est probablement pas le cas).

60
kgautron

L'activation par les propriétés du système peut être effectuée comme suit

<activation>
    <property>
        <name>foo</name>
        <value>bar</value>
    </property>
</activation>

Et lancez la construction mvn avec -D pour définir la propriété système

mvn clean install -Dfoo=bar

Cette méthode permet également de sélectionner des profils en dépendance transitive d'artefacts de projet.

13
koios

J'ai rencontré ce problème et j'ai résolu le problème mentionné en ajoutant le paramètre -DprofileIdEnabled=true lors de l'exécution de la commande mvn cli.

Veuillez exécuter votre commande mvn cli en tant que: mvn clean install -Pdev1 -DprofileIdEnabled=true.

En plus de cette solution, vous n'avez pas besoin de supprimer les paramètres activeByDefault de votre POM mentionnés dans la réponse précédente.

J'espère que cette réponse résoudra votre problème.

7
serkan kucukbay

Supprimez simplement la section d'activation, je ne sais pas pourquoi -Pdev1 ne remplace pas l'activation par défaut. Mais si vous omettez ceci:

<activation> <activeByDefault>false</activeByDefault> </activation>

alors votre profil sera activé seulement après une déclaration explicite en tant que -Pdev1

3
Paul D