web-dev-qa-db-ja.com

Java MavenMOJO-プロジェクトPOMから情報を取得する

私はMavenプラグインに取り組んでいます。 MOJOを実行するプロジェクトからPOM情報を取得するための良い方法は何でしょうか。

たとえば、別のMavenプロジェクトでmojoを実行する場合、プロジェクト名またはその他のパラメーターを取得したいと思います。

そしてもう1つ、AbstractMojo.JavaクラスにコンテキストMAPがあり、プライベートMap pluginContextがあります。私が間違っている場合、誰かが私を修正できますが、これはmojo間で情報を渡すために使用されると思われますか?

26
Xeperis

次のように宣言されたフィールドを使用して、現在の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>
_
35
Jörn Horstmann
@Component
private MavenProject project;

maven-plugin-annotationsから作成された新しいmojoのデフォルトである新しいmaven-archetype-pluginを使用する場合にも、(より簡潔かつ直感的に)機能します。

[〜#〜] edit [〜#〜](@ bmarguliesに感謝):3.2の時点での@ComponentJavadocはそれを使用することを提案していますがMavenProjectの場合、これは明らかに非推奨であり、提案は3.3で削除されます。 イディオム提案 by maven-plugin-tools-annotations(3.3以降)は次のようなものです(どちらも機能しているようです):

@Parameter(defaultValue="${project}", readonly=true, required=true)
private MavenProject project;
21
Jesse Glick

推奨される構文は次のとおりです。

@Parameter(defaultValue = "${project}", required = true, readonly = true)
MavenProject project;

プラグインのpomにmaven-projectの依存関係を追加する必要があります。

<dependency>
    <groupId>org.Apache.maven</groupId>
    <artifactId>maven-project</artifactId>
    <version>2.0.6</version>
</dependency>

(すでにこの情報を提供してくれた他の人に感謝します。この回答はそれらを1か所にまとめています。)

11
Partly Cloudy