2.1 maven-resources-plugin リソース プラグインのコピー

Web アプリケーションを構築している場合、その中にはさまざまなリソースが大量に存在することになります。これらは、jar ライブラリ、jsp サーブレット、設定ファイルです。そしてもちろん、これはhtmlcssjs、 などの静的ファイルの束と、さまざまな画像です。

デフォルトでは、プロジェクトをビルドするとき、Maven はフォルダーからsrc/main/resourcesターゲット ディレクトリにすべてのファイルを単純にコピーします。この動作を変更したい場合は、プラグインが役に立ちますmaven-resources-plugin

このようなプラグインのサンプルコード:

<plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.6</version>
    <executions>
        <execution>
            <id>copy-resources</id>
            <phase>validate</phase>
            <goals>
                <goal>copy-resources</goal>
            </goals>
            <configuration>
                <outputDirectory>
                   ${basedir}/target/resources
                </outputDirectory>
                <resources>
                    <resource>  instructions for copying a resource 1 </resource>
                    <resource>  instructions for copying a resource 2 </resource>
                    <resource>  instructions for copying a resource N </resource>
                </resources>
            </configuration>
        </execution>
    </executions>
</plugin>

このプラグインは検証フェーズ中に呼び出されます。タグを使用すると、<outputDirectory>プラグインが で指定されたリソースをコピーするディレクトリを設定できます<resources>。そして、ここがプラグインが最大限の力を発揮できる場所です。

2.2 maven-resources-plugin を使用したリソースのフィルタリング

プラグイン リソースは、ファイルの形式だけでなく、ディレクトリの形式でもすぐに指定できます。さらに、ディレクトリにマスクを追加して、ディレクトリ内のどのファイルをこのリソースに含めるかを指定できます。

例:


            <resource>
                <directory>src/main/resources/images</directory>
                <includes>
                     <include>**/*.png</include>
                </includes>
            </resource>

マスクとしての 2 つのアスタリスクは、任意の数のディレクトリを表します。上記の例では、ディレクトリsrc/main/resources/images(およびそのサブディレクトリ) に含まれるすべての png ファイルがリソース データとして取得されます。

一部のファイルを除外したい場合は、exclude. 例:

<resource>
    <directory>src/main/resources/images</directory>
    <includes>
        <include>**/*.png</include>
    </includes>
    <excludes>
         <exclude>old/*.png</exclude>
    </excludes>
</resource>

タグは順番に適用されます。まず、インクルード ファイルで指定されたインクルード ファイルがリソースに追加され、次にエクスクルード ファイルがこのリストから除外されます。

しかし、それだけではありません。プラグインはファイルの内部を調べることができます (もちろんテキストの場合)。たとえば、application.properties必要なバージョンのアセンブリをファイルに追加します。プラグインがファイルの内容を処理するには、パラメータ を指定する必要があります<filtering>true</filtering>

例:

<resource>
    <directory>src/main/resources/properties</directory>
    <filtering>true</filtering>
    <includes>
        <include>**/*. properties </include>
    </includes>
</resource>

このプラグインの詳細については、リンクhttps://maven.apache.org/plugins/maven-resources-plugin/examples/filter.htmlを参照してください。

2.3 maven-source-plugin ソースインクルードプラグイン

もう 1 つの便利なプラグイン - maven-source-pluginJava ファイルのソース コードをアセンブリに含めることができます。何のために?

問題は、Web アプリケーションに加えて、非常に多くのライブラリが Maven を使用して組み立てられているということです。多くの Java プロジェクトはオープンソースの概念に従っており、独自のソースとともに Java コミュニティに配布されています。

なぜ別のプラグインが必要なのでしょうか? なぜソースをコピーしてそれで終わりではないのでしょうか?

まず、複雑なプロジェクトでは、ソースが複数の場所に保存される可能性があります。

次に、XML 仕様に基づいたソースの生成がよく使用され、そのようなソースもアセンブリに含める必要があります。

そして 3 番目に、特に機密ファイルをアセンブリに含めないようにすることができます。

maven-source-plugin プラグインの使用例:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-source-plugin</artifactId>
    <version>2.2.1</version>
    <executions>
        <execution>
            <id>attach-sources</id>
            <phase>verify</phase>
            <goals>
                <goal>jar</goal>
            </goals>
        </execution>
    </executions>
</plugin>

2.4 maven-dependency-plugin 依存関係コピー プラグイン

プロジェクトを構築するときに、依存関係 (ライブラリ) をスマートにコピーする必要がある場合もあります。これにはプラグインが使用されますmaven-dependency-plugin

例:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.5.1</version>
    <configuration>
        <outputDirectory>
            ${project.build.directory}/lib/
        </outputDirectory>
    </configuration>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
        </execution>
    </executions>
</plugin>

この例では、プラグインのデフォルトの動作が記述されています - ライブラリを にコピーします${project.build.directory}/lib

実行セクションでは、プラグインがビルド段階 (パッケージ、ゴール、コピー依存関係) 中に呼び出されることが記載されています。

一般に、このプラグインにはかなり大きな目標があり、最も一般的な目標は次のとおりです。

1 依存関係:分析 依存関係の分析 (使用済み、未使用、指定済み、未指定)
2 依存関係:分析-重複 重複した依存関係の特定
3 依存関係:解決 すべての依存関係の解決 (定義)
4 依存関係:解決プラグイン すべてのプラグインの許可(定義)
5 依存関係:ツリー 依存関係ツリーの表示

構成セクションで追加のパラメーターを設定することもできます。

1 出力ディレクトリ 依存関係がコピーされるディレクトリ
2 上書きリリース リリースの作成時に依存関係を上書きするフラグ
3 スナップショットの上書き スナップショットのある非端末依存関係を上書きするフラグ
4 新しい場合は上書き ライブラリを新しいバージョンで上書きするためのフラグ

例:


<configuration>
    <outputDirectory>
         ${project.build.directory}/lib/
    </outputDirectory>
    <overWriteReleases>false</overWriteReleases>
    <overWriteSnapshots>false</overWriteSnapshots>
    <overWriteIfNewer>true</overWriteIfNewer>
 </configuration>

デフォルトでは<overWriteReleases>、and<overWriteSnapshots>は false、for<overWriteIfNewer>は true です。