Mavenプロファイルのガイド

1. 概要

  • https://www.baeldung.com/maven [Maven]プロファイルを使用して、テストの粒度レベルや特定のデプロイメント環境をターゲットにするなど、カスタマイズされたビルド構成を作成できます。

    このチュートリアルでは、Mavenプロファイルを操作する方法を学習します。

2. 基本的な例

通常は、_mvn package_を実行すると、ユニットテストも実行されます*。 しかし、*アーティファクトをすばやくパッケージ化して実行*し、動作するかどうかを確認する場合はどうでしょうか?
最初に、_maven.test.skip_プロパティを_trueに設定する_no-tests_プロファイルを作成します:_
<profile>
    <id>no-tests</id>
    <properties>
        <maven.test.skip>true</maven.test.skip>
    </properties>
</profile>
次に、_mvn package -Pno-tests_コマンドを実行してプロファイルを実行します。 *これでアーティファクトが作成され、テストはスキップされます。*この場合、_mvnパッケージの-Dmaven.test.skip_コマンドの方が簡単でした。
ただし、これはMavenプロファイルの紹介にすぎません。 もっと複雑な設定を見てみましょう。

3. プロファイルの宣言

前のセクションでは、1つのプロファイルを作成する方法を説明しました。 *一意のIDを指定することで、必要な数のプロファイルを設定できます*。
統合テストと一連の突然変異テストのみを実行するプロファイルを作成したいとしましょう。
_pom.xml_ファイル内のそれぞれに__id __を指定することから始めます。
<profiles>
    <profile>
        <id>integration-tests</id>
    </profile>
    <profile>
        <id>mutation-tests</id>
    </profile>
</profiles>
各_profile_要素内で、* _ dependencies _、_ plugins _、_ resources _、_ finalName_ *などの多くの要素を構成できます。
そのため、上記の例では、_integration-tests_と_mutation-tests_に個別にプラグインとその依存関係を追加できます。
テストをプロファイルに分離すると、たとえば単体テストのみに焦点を当てることで、デフォルトのビルドを高速化できます。

3.1. プロファイルの範囲

これで、これらのプロファイルをpom.xmlファイルに配置しただけで、プロジェクトに対してのみ宣言されます。
ただし、Maven 3では、実際に3つの場所のいずれかにプロファイルを追加できます。
  1. プロジェクト固有のプロファイルはプロジェクトのpom.xml fileに入ります

  2. ユーザー固有のプロファイルは、ユーザーの_settings.xml_ファイルに格納されます

  3. グローバルプロファイルはグローバル_settings.xml_ファイルに格納されます

    Maven 2は4番目の場所をサポートしていましたが、これはMaven 3で削除されたことに注意してください。
    *可能な限り_pom.xml_でプロファイルを構成しようとします。*その理由は、開発マシンとビルドマシンの両方でプロファイルを使用するためです。 _settings.xml_を使用することは、ビルド環境全体に配布する必要があるため、より難しく、エラーが発生しやすくなります。

4. プロファイルの有効化

1つまたは複数のプロファイルを作成したら*それらの使用を開始できます。つまり、それらを_アクティベート_できます。*

4.1. アクティブなプロファイルの確認

  • _help:active-profiles_ゴールを使用して、デフォルトのビルドでアクティブなプロファイルを確認しましょう*:

mvn help:active-profiles
実際には、まだ何もアクティブ化していないため、次のようになります。
The following profiles are active:
ええ、何もありません。
すぐにそれらを有効にします。 しかし、すぐに、アクティブになっているものを確認する別の方法は、__ pom.xml __に_maven-help-plugin_を含め、_active-profiles_ゴールを__compile __phaseに結び付けることです*。
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-help-plugin</artifactId>
            <version>3.2.0</version>
            <executions>
                <execution>
                    <id>show-profiles</id>
                    <phase>compile</phase>
                    <goals>
                        <goal>active-profiles</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
それでは、それらを使用してみましょう! いくつかの異なる方法を見ていきます。

4.2. _-P_の使用

実際、最初に1つの方法を既に見ました。それは、-_- P_引数を使用して*プロファイルをアクティブ化できることです。
それでは、_integration-test_プロファイルを有効にすることから始めましょう。
mvn package -P integration-tests
_maven-help-plugin_または_mvn help:active-profiles -P integration-tests_コマンドでアクティブなプロファイルを確認すると、次の結果が得られます。
The following profiles are active:

 - integration-tests
複数のプロファイルを同時に有効にしたい場合、プロファイルのコンマ区切りリストを使用します。
mvn package -P integration-tests,mutation-tests

4.3. デフォルトでアクティブ

常にプロファイルを実行したい場合は、デフォルトでプロファイルをアクティブにできます:
<profile>
    <id>integration-tests</id>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
</profile>
次に、プロファイルを指定せずに_mvn package_を実行し、_integration-test_プロファイルがアクティブであることを確認できます。
*ただし、Mavenコマンドを実行し、_activeByDefault_プロファイル以外のプロファイルを有効にするとスキップされます。* _mvn package -Pmutation-tests_を実行すると、_mutation-tests_プロファイルのみがアクティブになります。
他の方法でアクティブ化すると、次のセクションで説明するように、_activeByDefault_プロファイルもスキップされます。

4.4. プロパティに基づいて

コマンドラインでプロファイルを有効化できます。 ただし、自動的にアクティブ化される方が便利な場合があります。 たとえば、* _-D_システムプロパティに基づいて作成できます:*
<profile>
    <id>active-on-property-environment</id>
    <activation>
        <property>
            <name>environment</name>
        </property>
    </activation>
</profile>
ここで、_mvn package -Denvironment_コマンドを使用してプロファイルをアクティブ化します。
プロパティが存在しない場合、プロファイルをアクティブにすることもできます。
<property>
    <name>!environment</name>
</property>
または、プロファイルをアクティブにすることができます*プロパティに特定の値がある場合:*
<property>
    <name>environment</name>
    <value>test</value>
</property>
これで、_mvnパッケージ-Denvironment = test._を使用してプロファイルを実行できます。
最後に、プロパティに指定された値以外の値がある場合、プロファイルをアクティブ化できます。
<property>
    <name>environment</name>
    <value>!test</value>
</property>

4.5. JDKバージョンに基づく

別のオプションは、マシンで実行されているJDKに基づいてプロファイルを有効にすることです。 この場合、JDKバージョンが11で始まる場合、プロファイルを有効にします。
<profile>
    <id>active-on-jdk-11</id>
    <activation>
        <jdk>11</jdk>
    </activation>
</profile>
link:/maven-dependency-latest-version[Maven Version Range Syntax]で説明されているように、JDKバージョンの範囲を使用することもできます。

4.6. オペレーティングシステムに基づいて

または、オペレーティングシステムの情報に基づいてプロファイルをアクティブ化することもできます。
それがわからない場合は、最初に_mvnforcer:display-info_コマンドを使用して、マシン上に次の出力を表示できます。
Maven Version: 3.5.4
JDK Version: 11.0.2 normalized as: 11.0.2
OS Info: Arch: amd64 Family: windows Name: windows 10 Version: 10.0
その後、Windows 10でのみアクティブ化されるプロファイルを構成できます。
<profile>
    <id>active-on-windows-10</id>
    <activation>
        <os>
            <name>windows 10</name>
            <family>Windows</family>
            <arch>amd64</arch>
            <version>10.0</version>
        </os>
    </activation>
</profile>

4.7. ファイルに基づいて

別のオプションは、*ファイルが_存在する場合、または_missing _。*の場合、プロファイルを実行することです
_testreport.html_がまだ存在しない場合にのみ実行されるテストプロファイルを作成しましょう。
<activation>
    <file>
        <missing>target/testreport.html</missing>
    </file>
</activation>

5. プロファイルの無効化

プロファイルをアクティブにする多くの方法を見てきましたが、プロファイルも無効にする必要がある場合があります。
*プロファイルを無効にするには、「!」または '-'。*
したがって、_active-on-jdk-11_プロファイルを無効にするには、_mvn compile -P -active-on-jdk-11_コマンドを実行します。

6. 結論

この記事では、Mavenプロファイルを操作する方法を見てきました。そのため、さまざまなビルド構成を作成できます。
プロファイルは、必要なときにビルドの特定の要素を実行するのに役立ちます。 これにより、ビルドプロセスが最適化され、開発者により迅速なフィードバックが提供されます。
https://github.com/eugenp/tutorials/tree/master/maven/profiles[GitHub]で、完成した_p​​om.xml_ファイルをご覧ください。