webentwicklung-frage-antwort-db.com.de

Maven: Wie aktiviere ich ein Profil über die Befehlszeile?

Dies ist ein Ausschnitt aus meiner pom.xml. Ich habe Folgendes versucht, aber das Profil wurde nicht aktiviert.

mvn clean install -Pdev1
mvn clean install -P dev1

Als ich es versuchte mvn help:active-profiles Es wurden keine Profile als aktiv aufgelistet. Wenn ich <activeByDefault> zum dev1 zu true und starte mvn help:active-profiles, es zeigt mir, dass das Profil aktiviert ist.

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

Ich frage mich, warum mein Profil nicht aktiviert wird. Hat jemand ein ähnliches Problem festgestellt?

51
indolent

Sie werden es nicht mit sehen

mvn help:active-profiles

da der Befehl kein -Pdev1 enthält.

Sie würden es mit mvn help:active-profiles -Pdev1 Sehen (aber das hat offensichtlich keinen Sinn).

Die Befehle, die Sie gezeigt haben:

mvn clean install -Pdev1
mvn clean install -P dev1

sind richtig. Das Problem ist wahrscheinlich nicht, dass das Profil nicht aktiviert ist, sondern nicht das tut, was Sie erwarten.

Um sicherzustellen, dass dies der Fall ist, können Sie activeByDefault im Profil auf true setzen, dann mvn help:active-profiles Starten, um zu sehen, dass es effektiv aktiviert ist, und dann mvn install und überprüfe, ob das Profil das tut, was du erwartest (was wahrscheinlich auch nicht der Fall ist).

60
kgautron

Die Aktivierung durch Systemeigenschaften kann wie folgt erfolgen

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

Führen Sie den mvn-Build mit -D aus, um die Systemeigenschaft festzulegen

mvn clean install -Dfoo=bar

Diese Methode hilft auch bei der Auswahl von Profilen in transitiver Abhängigkeit von Projektartefakten.

13
koios

Ich bin auf dieses Problem gestoßen und habe das erwähnte Problem durch Hinzufügen des Parameters -DprofileIdEnabled=true Beim Ausführen des Befehls mvn cli gelöst.

Bitte führen Sie Ihren Befehl mvn cli wie folgt aus: mvn clean install -Pdev1 -DprofileIdEnabled=true.

Zusätzlich zu dieser Lösung müssen Sie die activeByDefault -Einstellungen in Ihrem POM, die als vorherige Antwort erwähnt wurden, nicht entfernen.

Ich hoffe diese Antwort löst dein Problem.

7
serkan kucukbay

Entfernen Sie einfach den Aktivierungsabschnitt. Ich weiß nicht, warum -Pdev1 die standardmäßig falsche Aktivierung nicht überschreibt. Aber wenn Sie das weglassen:

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

dann wird dein Profil erst nach expliziter Deklaration als -Pdev1 aktiviert

3
Paul D