Java Maven MOJO - 从项目POM获取信息

Xep*_*ris 26 java mojo pom.xml maven

我正在研究一个maven插件.我似乎很难搞清楚,从执行MOJO的项目中获取POM信息的好方法是什么?

例如,如果我在另一个maven项目中执行我的mojo,我想获得项目名称或其他一些参数.

还有一件事,在AbstractMojo.java类中有一个上下文MAP有私有Map pluginContext,如果我错了可能会有人纠正我,但这是假设用于在mojos之间传递信息吗?

Jör*_*ann 35

您可以使用如下所示的字段将当前的maven项目注入到mojo中:

/**
 * @parameter default-value="${project}"
 * @required
 * @readonly
 */
MavenProject project;
Run Code Online (Sandbox Code Playgroud)

然后只需调用即可获得项目名称project.getName().要使用此API,您需要将maven-project工件添加为依赖项:

<dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-project</artifactId>
    <version>2.0.6</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)


Jes*_*ick 21

@Component
private MavenProject project;
Run Code Online (Sandbox Code Playgroud)

如果使用new maven-plugin-annotations,这也是新的mojos的默认设置,也可以(更简洁和直观)工作maven-archetype-plugin.

编辑(感谢@bmargulies):尽管@Component3.2版的Javadoc建议使用它MavenProject,但显然已弃用,建议从3.3开始删除; 该建议成语maven-plugin-tools-annotations(如3.3)是这样的(似乎都工作):

@Parameter(defaultValue="${project}", readonly=true, required=true)
private MavenProject project;
Run Code Online (Sandbox Code Playgroud)

  • 注释相当于@JörnHorstmann的回答. (2认同)

Par*_*udy 11

首选语法是:

@Parameter(defaultValue = "${project}", required = true, readonly = true)
MavenProject project;
Run Code Online (Sandbox Code Playgroud)

您必须为maven-project插件的pom 添加依赖项:

<dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-project</artifactId>
    <version>2.0.6</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

(感谢已经提供此信息的其他人.这个答案将它们组合在一个地方.)

  • 也许对于@Parameter注释,您希望添加maven-plugin-annotations工件. (2认同)