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?


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.


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.


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.


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.