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

79

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, wurden mvn help:active-profileskeine Profile als aktiv aufgeführt. Wenn ich eingestellt <activeByDefault>für dev1auf trueund laufen mvn help:active-profiles, es zeigt mir 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?

träge
quelle
Zumindest mit Maven 3.5.3 -Pfunktioniert wie erwartet ... FWIW ...
Rogerdpack

Antworten:

87

Beide Befehle sind korrekt:

mvn clean install -Pdev1
mvn clean install -P dev1

Das Problem ist höchstwahrscheinlich nicht die Profilaktivierung, aber das Profil erreicht nicht das, was Sie erwarten .

Es ist normal, dass der Befehl:

mvn help:active-profiles

zeigt das Profil nicht an, da es nicht enthält -Pdev1. Sie könnten es hinzufügen, um das Profil erscheinen zu lassen, aber es wäre sinnlos, weil Sie Maven selbst testen würden.

Sie sollten das Profilverhalten folgendermaßen überprüfen :

  1. eingestellt , activeByDefaultum truein der Profilkonfiguration,
  2. run mvn help:active-profiles(um sicherzustellen, dass es auch ohne aktiviert ist -Pdev1),
  3. laufen mvn install.

Es sollte die gleichen Ergebnisse wie zuvor liefern und daher bestätigen, dass das Problem darin besteht, dass das Profil nicht das tut, was Sie erwarten.

kgautron
quelle
1
Ja, wenn ich activeByDefault auf true setze, wird unter mvn help Folgendes angezeigt: active-profile. Durch Ausführen von mvn clean install -Pdev1 wird das Profil jedoch nicht aktiviert.
träge
13

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 der transitiven Abhängigkeit von Projektartefakten.

Koios
quelle
In meinem Fall ersetzen Eigenschaften keine Platzhalter in * .properties. Können Sie bitte stackoverflow.com/questions/51186963/…
vikramvi
9

Ich bin auf dieses Problem gestoßen und habe das erwähnte Problem durch Hinzufügen eines -DprofileIdEnabled=trueParameters 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 nicht entfernen, die als vorherige Antwort angegeben wurden.

Ich hoffe, diese Antwort löst Ihr Problem.

Serkan Kucukbay
quelle
Jemand könnte auch Tests für schnellere Builds überspringen mvn clean install -Prelease -DprofileIdEnabled = true -DskipTests
Yeasin Ar Rahman
4

Entfernen Sie einfach den Aktivierungsabschnitt. Ich weiß nicht, warum -Pdev1 die falsche Standardaktivierung nicht überschreibt. Aber wenn Sie dies weglassen:

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

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

Paul D.
quelle