web-dev-qa-db-ja.com

Maven:コマンドラインからプロファイルを有効にするにはどうすればよいですか?

これは、pom.xmlからの抜粋です。以下を試してみましたが、プロファイルはアクティブになりませんでした。

mvn clean install -Pdev1
mvn clean install -P dev1

mvn help:active-profilesを試したときに、アクティブなプロファイルがリストされていませんでした。 <activeByDefault>dev1trueに設定し、mvn help:active-profilesを実行すると、プロファイルがアクティブになっていることがわかります。

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

自分のプロファイルがアクティブにならないのはなぜだろうか。誰かが同様の問題に遭遇しましたか?

51
indolent

あなたはそれを見ません

mvn help:active-profiles

コマンドに-Pdev1がないため。

mvn help:active-profiles -Pdev1で表示されます(ただし、明らかにそれは意味がありません)。

あなたが示したコマンド:

mvn clean install -Pdev1
mvn clean install -P dev1

は正しい。問題はおそらくnotプロファイルがアクティブ化されていないということですが、予想どおりに機能していません。

そのためには、プロファイルでactiveByDefaulttrueに設定し、mvn help:active-profilesを起動して効果的にアクティブになっていることを確認してから、mvn installを起動して確認します。プロファイルが期待どおりに動作する場合(これもおそらくそうではありません)。

60
kgautron

システムプロパティによるアクティベーションは、次のように実行できます。

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

-Dを指定してmvnビルドを実行し、システムプロパティを設定します

mvn clean install -Dfoo=bar

この方法は、プロジェクト成果物の推移的な依存関係にあるプロファイルの選択にも役立ちます。

13
koios

この問題に遭遇したので、mvn cliコマンドの実行中に-DprofileIdEnabled=trueパラメーターを追加することにより、上記の問題を解決しました。

Mvn cliコマンドをmvn clean install -Pdev1 -DprofileIdEnabled=trueとして実行してください。

このソリューションに加えて、前述の回答として言及したPOMのactiveByDefault設定を削除する必要はありません。

この回答があなたの問題を解決することを願っています。

7
serkan kucukbay

アクティベーションセクションを削除するだけで、なぜ-Pdev1がデフォルトのfalseアクティベーションをオーバーライドしないのかわかりません。ただし、これを省略すると:

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

その後、プロファイルは-Pdev1として明示的に宣言された後にのみアクティブになります

3
Paul D