1. 概要

この簡単なチュートリアルでは、Mavenのタグと、それを使用してWAR、EAR、JARなどのMavenプロジェクトのアーティファクトのサイズと範囲を縮小する方法。

Mavenの復習については、包括的なガイドを確認してください。

2. とは

他のMavenプロジェクトの依存関係となるMavenプロジェクトを作成する場合があります。 このようなプロジェクトで作業する場合、そのプロジェクトの機能のサブセットにのみ役立つ1つ以上の依存関係を含める必要がある場合があります。

エンドユーザーがその機能サブセットを使用しない場合でも、プロジェクトはそれらの依存関係を推移的に取り込みます。 これにより、ユーザーのプロジェクトサイズが不必要に肥大化し、他のプロジェクト依存関係と競合する依存関係バージョンが導入される可能性があります。

理想的には、プロジェクトの機能サブセットを独自のモジュールに分割し、プロジェクトの残りの部分を汚染しないようにする必要があります。 ただし、これは必ずしも実用的ではありません。

これらの特別な依存関係をメインプロジェクトから除外するために、Mavenのそれらにタグを付けます。 これにより、これらの依存関係を使用するユーザーは、それらを明示的に宣言する必要があります。 ただし、これらの依存関係を、それらを必要としないプロジェクトに強制することはありません。

3. 使い方

これから見ていくように、 の値を持つ要素真実 Mavenの依存関係をオプションにします。

次のプロジェクトpomがあると仮定しましょう。

<project>
    ...
    <artifactId>project-with-optionals</artifactId>
    ...
    <dependencies>
        <dependency>
            <groupId>com.baeldung</groupId>
            <artifactId>optional-project</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <optional>true</optional>
        </dependency>
    </dependencies>
</project>

この例では、 オプション-プロジェクトオプションとしてラベル付けされ、の使用可能な依存関係として残りますオプション付きプロジェクトまるでタグはありませんでした。

の効果を見るためにタグ、に依存する新しいプロジェクトを作成する必要がありますオプション付きプロジェクト

<project>
    ...
    <artifactId>main-project</artifactId>
    ...
    <dependencies>
        <dependency>
            <groupId>com.baeldung</groupId>
            <artifactId>project-with-optionals</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

ここで、main-project内からoptional-projectを参照しようとすると、optional-projectが存在しないことがわかります。 これは、 タグは、一時的に含まれるのを防ぎます。

main-projectoptional-projectが必要であることがわかった場合は、それを依存関係として宣言する必要があります。

4. 結論

この記事では、Mavenの鬼ごっこ。 タグを使用する主な利点は、プロジェクトのサイズを縮小し、バージョンの競合を防ぐのに役立つことです。 また、タグはそれを使用するプロジェクトに影響を与えないこともわかりました。

この記事のソースコードは、Githubでから入手できます。