5

私のプロジェクトでは、カスタム Maven プラグインを使用する必要があります。できればローカル リポジトリを台無しにすることなく、簡単にビルドする方法を探しています。

単純なプロジェクト ツリーを考えてみましょう。

root-project
    |---pom.xml
    |---my-library
    |       \---pom.xml
    |---my-maven-plugin
    |       \---pom.xml
    \---my-project
            \---pom.xml

root-project<modules>内部としてリストされている 3 つのサブプロジェクトがあります。主なものは、ビルド プロセス中にmy-project使用my-maven-pluginされるため、最初にプラグインをビルドする必要があります。

私がやりたいことは、単に実行することです:

root-project $ mvn package

これはmy-maven-plugin最初にビルドし、 のビルド中に使用する必要がありmy-projectます。

残念ながら、これは機能しません。「プロジェクトのスキャン中...」フェーズ中に Maven が動作を停止し、次のエラー メッセージが表示されます。

Unresolveable build extension: Plugin test:my-maven-plugin:1.0 or one of its dependencies could not be resolved: Could not find artifact test:my-maven-plugin:jar:1.0

最初にやればうまくいく

$ cd my-maven-plugin
$ mvn install
$ cd ..
$ mvn package

見栄えがよくありません。ただし、実際の問題は、プラグイン自体がmy-library(ルートの別の子モジュールである) に依存していることです。したがって、プラグインをビルドする前に、ライブラリ ディレクトリに入ってインストールする必要があります。プラグインに「内部」依存関係を追加するたびに、事態はますます悪化しています。その結果、ローカル リポジトリが混乱し、プロジェクトを再構築するために多くの手動手順が必要になります。

最初にプラグインをビルドし (deps を使用)、後でプロジェクトのビルド中に使用する必要があることを Maven に伝える方法はありますか?

4

1 に答える 1

3

あなたの状況でプロファイルを使用することをお勧めします。root-projectの pom.xmlには、 build-pluginbuild-projectの2 つのプロファイルが考えられます。モジュールの集約 (<modules> リスト) は、これらのプロファイルに移動されます。たとえば、build-pluginプロファイルには以下が含まれます。

<modules>
   <module>my-library</module> 
   <!-- + any other "internal" dependencies needed to build the plugin -->
   <module>my-maven-plugin</module>
</modules>

同様に、build-projectプロファイルには、my-project のビルドに必要なモジュール リストが含まれます。それで、

mvn clean install -P build-plugin

mvn クリーン パッケージ -P ビルド プロジェクト

それぞれmy-maven-pluginmy-projectのビルドを呼び出すコマンドになります。これらのコマンドは両方ともroot-projectのディレクトリから実行されます。ほとんどの場合、それらを順番に実行する必要がある場合は、単純なシェルスクリプトで作業できます...

于 2013-03-26T05:42:52.890 に答える