私はmavenプラグインに取り組んでいます。MOJO を実行するプロジェクトから POM 情報を取得する良い方法は何でしょうか?
たとえば、別の Maven プロジェクトで mojo を実行する場合、プロジェクト名またはその他のパラメーターを取得したいと考えています。
もう 1 つ、AbstractMojo.java クラスにコンテキスト MAP があり、プライベート Map pluginContext があります。私が間違っている場合、誰かが私を訂正できますか?
次のように宣言されたフィールドを使用して、現在の Maven プロジェクトを mojo に挿入できます。
/**
* @parameter default-value="${project}"
* @required
* @readonly
*/
MavenProject project;
プロジェクト名は、 を呼び出すだけで使用できますproject.getName()
。この API を使用するには、maven-project
アーティファクトを依存関係として追加する必要があります。
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-project</artifactId>
<version>2.0.6</version>
</dependency>
@Component
private MavenProject project;
maven-plugin-annotations
から作成された新しい mojos のデフォルトであるnew を使用する場合も (より簡潔かつ直感的に)機能しますmaven-archetype-plugin
。
編集(@bmargulies に感謝): @Component
3.2 の時点での Javadoc は、それを for に使用することを提案していますがMavenProject
、明らかにそれは非推奨であり、提案は 3.3 の時点で削除されています。(3.3の時点で)によって提案されたイディオムは次のようなものです(両方とも機能するようです):maven-plugin-tools-annotations
@Parameter(defaultValue="${project}", readonly=true, required=true)
private MavenProject project;
現在推奨される構文は次のとおりです。
@Parameter(defaultValue = "${project}", required = true, readonly = true)
MavenProject project;
maven-project
プラグインの pom に依存関係を追加する必要があります。
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-project</artifactId>
<version>2.0.6</version>
</dependency>
(すでにこの情報を提供してくれた他の人に感謝します。この回答はそれらを1か所にまとめたものです。)