1.1 Maven で構築するプラグインのリスト

Maven のアセンブリは非常に柔軟に構成できます。Maven 開発者は数十のプラグインを特別に作成しており、これを使用すると、さまざまなビルドを非常に柔軟に構成できます。その中で最も人気のあるものを以下の表に示します。

プラグイン 説明
1 maven-コンパイラ-プラグイン Javaのコンパイルを管理します
2 maven-リソース-プラグイン アセンブリへのリソースの包含を制御します
3 Mavenソースプラグイン ソースコードがアセンブリに含まれるかどうかを制御します
4 maven-依存関係-プラグイン 依存関係ライブラリをコピーするプロセスを制御します
5 maven-jar-プラグイン 最終的なjarファイルを作成するプラグイン
6 Maven 戦争プラグイン 最終戦争ファイルを作成するためのプラグイン
7 maven-surefire-プラグイン テストの実行を管理します
8 ビルド番号-maven-プラグイン ビルド番号を生成します

各プラグインはそれぞれ独自の方法で興味深いものですが、すべてを分析する必要があります。主要なものであるコンパイル管理プラグインから始めましょう。

1.2 コンパイルプラグイン maven-compiler-plugin

コンパイラのバージョンを制御できる最も人気のあるプラグインは、ほぼすべてのプロジェクトで使用されていますmaven-compiler-plugin。デフォルト設定がありますが、ほとんどすべてのプロジェクトで再設定する必要があります。

最も単純なバージョンでは、プラグインで、Java ソース コードのバージョンと、アセンブリが実行される Java マシンのバージョンを指定する必要があります。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.2</version>
    <configuration>
        <source>1.11</source>
        <target>1.13</target>
        <encoding>UTF-8</encoding>
    </configuration>
</plugin>

上の例では、 、 、 の 3 つの Java コンパイラ オプションを設定してsourcetargetますencoding

このパラメータをsource使用すると、ソースの Java バージョンを設定できます。パラメータは、targetクラスをコンパイルする Java マシンのバージョンです。コードまたは Java マシンのバージョンが指定されていない場合、デフォルトは 1.3 です。

最後に、パラメーターを使用してencodingJava ファイルのエンコーディングを指定できます。を記載しましたUTF-8。現在、ほぼすべてのソースが に保存されていますUTF-8。ただし、このパラメータが指定されていない場合は、オペレーティング システムの現在のエンコーディングが選択されます。Windows の場合、これはエンコーディングですWindows-1251

また、異なるモジュールや異なるプロジェクトをビルドするために、ビルド コンピューターに複数のバージョンの Java がインストールされている場合もあります。この場合、JAVA_HOME変数にはいずれか 1 つのパスのみを指定できます。

さらに、Java マシンには OpenJDK、OracleJDK、Amazon JDK などのさまざまな実装があります。そしてプロジェクトが大規模になればなるほど、その構造はより複雑になります。ただし、タグを使用してプラグインの javac コンパイラへのパスを明示的に設定できます。 。この機会に特別に追加されました。

このプラグインにはmaven-compiler-plugin2 つの目標があります。

  • compiler:compile– ソースのコンパイル。デフォルトでコンパイルフェーズに関連付けられます。
  • compiler:testCompile– テストのコンパイル。デフォルトでは、テストコンパイルフェーズに関連付けられます。

コマンドラインで javac コンパイラに渡す引数のリストを指定することもできます。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.2</version>
    <configuration>
        <compilerArgs>
            <arg>-verbose</arg>
            <arg>-Xlint:all,-options,-path<arg>
        </compilerArgs>
    </configuration>
</plugin>

1.3 jarファイル作成用プラグイン maven-jar-plugin

Maven を使用して独自の jar ライブラリを構築したい場合は、maven-jar-plugin が必要になります。このプラグインは多くの便利なことを行います。

そのようなプラグインの例:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <includes>
            <include>**/properties/*</include>
        </includes>
        <archive>
           <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
        </archive>
    </configuration>
</plugin>

まず、どのファイルをライブラリに入れるか、どのファイルを入れないかを指定するために使用できます。<include>セクションのタグを使用すると、コンテンツをライブラリに追加する必要があるディレクトリのリストを<includes>指定できます。

次に、各 jar にはマニフェスト ( MANIFEST.MFファイル) が必要です。プラグイン自体がそれをライブラリ内の適切な場所に配置します。必要なのは、それを取得するパスを指定することだけです。これにはタグが使用されます<manifestFile>

最後に、プラグインは独自にマニフェストを生成できます。これを行うには、タグの代わりにタグを追加し、その中に将来のマニフェストのデータを指定する<manifestFile>必要があります。<manifest>例:

<configuration>
    <archive>
        <manifest>
            <addClasspath>true</addClasspath>
            <classpathPrefix>lib/</classpathPrefix>
            <mainClass>com.codegym.MainApplication</mainClass>
        </manifest>
    </archive>
</configuration>

タグは<addClasspath>マニフェストに追加するかどうかを指定しますCLASSPATH

このタグを使用<classpathPrefix>すると、各リソースの前にプレフィックス (サンプル ライブラリ内) を追加できます。でプレフィックスを指定すると、<classpathPrefix>依存関係を別のフォルダーに配置できます。

はい、ライブラリを別のライブラリ内に配置できます。そして、jar ライブラリー内にあるプロパティー・ファイルへのパスをどこかに渡す必要がある場合、多くの驚くべきことがあなたを待っています。

最後に、タグは<mainClass>メインの実行可能クラスを指します。「メインの実行可能クラスは何ですか ? "、 - あなたが尋ねる。そして重要なことは、Java マシンは Java クラスだけでなく、jar ファイルによって指定されたプログラムも実行できるということです。そして、メインの開始クラスが必要になるのはこの場合です。

1.4 ビルド番号生成プラグイン buildnumber-maven-plugin

多くの場合、jar ライブラリと war ファイルには、プロジェクトの名前とそのバージョン、およびアセンブリのバージョンに関する情報が含まれています。これは依存関係の管理に役立つだけでなく、テストも簡素化します。ライブラリのどのバージョンでエラーが修正され、どのバージョンにエラーが追加されたかが明確になります。

ほとんどの場合、このタスクは次のように解決されます。必要な情報をすべて含む特別なファイルを作成しapplication.properties、それをアセンブリに含めます。このファイルのデータがMANIFEST.MFetc.に移行されるようにビルド スクリプトを構成することもできます。

しかし、最も興味深いのは、Maven にはそのような application.properties ファイルを生成できる特別なプラグインがあることです。これを行うには、そのようなファイルを作成し、それに特別なデータ テンプレートを入力する必要があります。例:

# application.properties
app.name=${pom.name}
app.version=${pom.version}
app.build=${buildNumber}

3 つのパラメータすべての値はビルド段階で置き換えられます。

パラメータpom.nameと はpom.versionから直接取得されますpom.xml。Maven で一意のビルド番号を生成するには、特別なプラグインがありますbuildnumber-maven-plugin。以下の例を参照してください。

<packaging>war</packaging>
<version>1.0</version>
<plugins>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>buildnumber-maven-plugin</artifactId>
        <version>1.2</version>
        <executions>
            <execution>
                <phase>validate</phase>
                <goals>
                    <goal>create</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <revisionOnScmFailure>true</revisionOnScmFailure>
            <format>{0}-{1,date,yyyyMMdd}</format>
            <items>
                 <item>${project.version}</item>
                 <item>timestamp</item>
            </items>
        </configuration>
    </plugin>
</plugins>

上の例では、3 つの重要なことが起こります。まず、プラグイン自体がアセンブリのバージョンを設定するために指定されます次に、検証フェーズ (最初のフェーズ) で実行され、ビルド番号 - が生成されることが指定されています${buildNumber}

そして 3 番目に、このアセンブリ番号の形式が示されます。このアセンブリ番号は、いくつかの部品を接着して組み立てられます。これは、テンプレートによって指定されたプロジェクトのバージョンproject.versionと現在時刻です。テンプレートの形式は Java クラスによって指定されますMessageFormat