Eclipseにはインクリメンタルビルドの概念があります。これは多くの時間を節約できるので非常に便利です。
これはどのように便利ですか
単一の.javaファイルを変更したとしましょう。インクリメンタルビルダーは、すべてを再コンパイルすることなくコードをコンパイルできます(これには時間がかかります)。
今Mavenプラグインの問題は何ですか
Mavenプラグインのほとんどはインクリメンタルビルド用に設計されていないため、m2eで問題が発生します。m2eは、プラグインの目標が重要なものであるか、それとも無関係であるかを知りません。単一のファイルが変更されたときにすべてのプラグインを実行するだけでは、かなりの時間がかかります。
これが、m2eが実行の処理方法を理解するためにメタデータ情報に依存している理由です。m2eはこのメタデータ情報を提供するためのさまざまなオプションを考え出し、優先順位は以下のとおりです(最高から最低)。
- プロジェクトのpom.xmlファイル
- 親、祖父母などのpom.xmlファイル
- [m2e 1.2+]ワークスペース設定
- インストールされたm2e拡張機能
- [m2e 1.1+] mavenプラグインによって提供されるライフサイクルマッピングメタデータ
- m2eに付属するデフォルトのライフサイクルマッピングメタデータ
1,2は、pomファイルまたはその親のいずれかのタグでpluginManagementセクションを指定することを指します。M2Eはこの構成を読み取ってプロジェクトを構成します。以下のスニペットは、m2eにyuicompressor-maven-pluginの目標jslint
とcompress
目標を無視するように指示します
<pluginManagement>
<plugins>
<!--This plugin's configuration is used to store Eclipse m2e settings
only. It has no influence on the Maven build itself. -->
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>net.alchim31.maven</groupId>
<artifactId>yuicompressor-maven-plugin</artifactId>
<versionRange>[1.0,)</versionRange>
<goals>
<goal>compress</goal>
<goal>jslint</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
3)このメタデータでpomファイルを汚染したくない場合は、これを外部XMLファイルに保存できます(オプション3)。以下は、m2eにyuicompressor-maven-pluginの目的jslint
とcompress
目標を無視するように指示するサンプルマッピングファイルです。
<?xml version="1.0" encoding="UTF-8"?>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>net.alchim31.maven</groupId>
<artifactId>yuicompressor-maven-plugin</artifactId>
<versionRange>[1.0,)</versionRange>
<goals>
<goal>compress</goal>
<goal>jslint</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore/>
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
4)これら3つのオプションのいずれかが気に入らない場合は、Mavenプラグインにm2eコネクター(拡張)を使用できます。コネクターは、m2eにメタデータを提供します。このリンクで、コネクタ内のメタデータ情報の例を確認できます。メタデータがコンフィギュレーターを参照していることに気づいたかもしれません。これは単に、m2eが拡張機能の作成者から提供された特定のJavaクラスに責任を委任することを意味します。コンフィギュレータ内で適切に管理されていないため、プロジェクトが無限にビルドされる可能性があります)
configuratior(の例についてはこれらのリンクを参照してくださいリンク1、リンク2)。したがって、プラグインが外部コネクタを介して管理できるものである場合は、インストールできます。m2eは、他の開発者によって提供されたそのようなコネクターのリストを保持しています。これは、ディスカバリー・カタログと呼ばれています。m2eは、オプション(1〜6)のいずれかを介して実行するライフサイクルマッピングメタデータがまだなく、検出カタログに実行を管理できる拡張機能がある場合、コネクタをインストールするように求めます。
以下の画像は、m2eがbuild-helper-maven-pluginのコネクターをインストールするように求める方法を示しています。
。
5)のM2eは、Mavenの-プラグインitself.Thisは、ユーザーが任意の追加のライフサイクルのマッピングを使用する必要はありませんかconnectors.Someプラグイン作成者がいることを意味する内インクリメンタルビルドと供給のライフサイクルのマッピングをサポートするためのプラグインの作成者を奨励すでにこれを実装します
6)デフォルトでは、m2eは、maven-compiler-pluginなどの一般的に使用されるほとんどのプラグインのライフサイクルマッピングメタデータを保持します。
ここで質問に戻ります。おそらく、問題を引き起こしている特定の目標に対して、1、2、または3で無視ライフサイクルマッピングを提供できます。