質問

私はリリースの一環として私たちのプロジェクト全体で実行するカスタムプラグインを持っています。

マルチモジュールビルドを使用し始めるだけで、プラグインはトップモジュールでのみ実行されます。リリースの終わりに個々にすべてのモジュール上で実行させるためにプラグインのために私のプラグインのために何をしなければなりませんか?プラグインコード自体でそれらを繰り返す必要がありますか?もしそうなら、私が見るものから、mavenproject.getModules()はそれらのモジュールの文字列名のリストを返すだけで、それらのモジュールの情報を取得する方法はわかりません(私のプラグインのニーズに合わせて) GroupID:artifactid:それぞれのバージョン、そしてこの場合、モジュールは必ずしも同じバージョンを持っていません)。

私は@aggregatorの有無にかかわらず試しましたが、それは私の問題に関して何も変わりません。

私はこれがCLIから直接(フェーズに縛られていない)と同じであると仮定します。これもプロジェクトの最上位レベルでのみ実行され、すべてのサブモジュールに対してスキップされたレポートがスキップされます。

Maven 3.0.3を使用しています。

役に立ちましたか?

解決

私は私のMavenプラグインに関して同じ問題を抱えていました。それは一度だけ呼び出されただけで、私は最終的に私のプラグインがMavenアノテーション "@RequiresProject False"を持っていたという事実にそれを追跡しました。 Maven Reactorがそのようなプラグインのみを一度起動します。 「@RequiresProject True」に切り替えたら、My Mojoがモジュールごとに1回呼び出されました。私はリリースに移行していませんでした:演奏するので、ymmv。

すべてのモジュールにアクセスするのは、名前を付けるMavenProject.getModules()を使用する代わりに、MavenProjectオブジェクトを次のように注入できます。

   /**
    * The projects in the reactor.
    *
    * @parameter expression="${reactorProjects}"
    * @readonly
    */
   private List<MavenProject> reactorProjects;
.

ライフサイクルフェーズへのバインド時に@Aggregatorに注意してください。 「ライフサイクルにバインドすると、アグリゲーターモジョにいくつかの厄介な副作用がある可能性があります。Lifecycleフェーズの実行を強制することができます。二度」 ref

ビルドの終わりに一度だけMaven Mojoを実行するにどのように実行されますか?に代わるものがいくつかありますか。

他のヒント

新しいmaven-plugin-annotationsを使用すると、注入することもできます。

@Component
private MavenSession session;
.

session.getProjects()(Maven 3)またはsession.getSortedProjects()(2)を呼び出します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top