1. 概要

Mavenプロファイルを使用して、カスタマイズされたビルド構成を作成できます。たとえば、テストの粒度のレベルや特定のデプロイメント環境をターゲットにすることができます。

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

2. 基本的な例

通常、 mvnパッケージを実行すると、単体テストも実行されます。 しかし、アーティファクトをすばやくパッケージ化して実行して、機能するかどうかを確認したい場合はどうでしょうか。

まず、 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 package-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要素内で、依存関係、プラグイン、リソース、finalNameなどの多くの要素を構成できます。

したがって、上記の例では、統合テストミューテーションテストのプラグインとその依存関係を別々に追加できます。

テストをプロファイルに分離すると、たとえば単体テストだけに焦点を当てることで、デフォルトのビルドを高速化できます。

3.1. プロファイルスコープ

ここで、これらのプロファイルを pom.xml ファイルに配置しました。このファイルは、プロジェクトに対してのみプロファイルを宣言します。

ただし、Maven 3では、実際には次の3つの場所のいずれかにプロファイルを追加できます。

  1. プロジェクト固有のプロファイルは、プロジェクトのpom.xmlファイルに入ります
  2. ユーザー固有のプロファイルは、ユーザーのsettings.xmlファイルに入ります
  3. グローバルプロファイルは、グローバルsettings.xmlファイルに移動します

Maven 2は4番目の場所をサポートしていましたが、これはMaven3で削除されたことに注意してください。

可能な限りpom.xmlでプロファイルを構成しようとします。その理由は、開発マシンとビルドマシンの両方でプロファイルを使用したいからです。 settings.xml を使用することは、ビルド環境全体に分散する必要があるため、より困難でエラーが発生しやすくなります。

4. プロファイルのアクティブ化

1つ以上のプロファイルを作成した後それらを使い始める、つまりアクティブ化することができます。

4.1. どのプロファイルがアクティブであるかを確認する

help:active-profilesの目標を使用して、デフォルトのビルドでアクティブなプロファイルを確認しましょう。

mvn help:active-profiles

実際、まだ何もアクティブ化していないため、次のようになります。

The following profiles are active:

まあ、何も。

すぐにアクティブにします。 しかし、すぐに、何がアクティブ化されているかを確認する別の方法は、 maven-help-pluginをpom.xmlに含め、active-profilesの目標をコンパイルフェーズに結び付けることです。

<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引数を使用してプロファイルをアクティブ化できるということです。

それでは、統合テストプロファイルを有効にすることから始めましょう。

mvn package -P integration-tests

maven-help-pluginまたはmvnhelp: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 を実行し、統合テストプロファイルがアクティブであることを確認できます。

ただし、Mavenコマンドを実行して別のプロファイルを有効にすると、activeByDefaultプロファイルはスキップされます。したがって、mvnパッケージ-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バージョンに基づく

もう1つのオプションは、マシンで実行されているJDKに基づいてプロファイルを有効にすることです。 この場合、JDKバージョンが11で始まる場合は、プロファイルを有効にします。

<profile>
    <id>active-on-jdk-11</id>
    <activation>
        <jdk>11</jdk>
    </activation>
</profile>

Mavenバージョン範囲構文で説明されているように、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

その後、Windows10でのみアクティブ化されるプロファイルを構成できます。

<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. ファイルに基づく

別のオプションは、プロファイルを実行することですファイルが存在するか欠落している場合。

それでは、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プロファイルを操作する方法を説明したので、さまざまなビルド構成を作成できます。

プロファイルは、必要なときにビルドの特定の要素を実行するのに役立ちます。 これにより、ビルドプロセスが最適化され、開発者に迅速なフィードバックを提供できます。

完成したpom.xmlファイルをGitHubでお気軽にご覧ください。