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

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

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

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

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

/** * @parameter default-value="${project}" * @required * @readonly */ MavenProject project; 

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

  org.apache.maven maven-project 2.0.6  
 @Component private MavenProject project; 

如果使用新的maven-plugin-annotations ,这也是有效的(更简洁和直观),这是从maven-archetype-plugin创建的新mojos的默认设置。

编辑 (感谢@bmargulies):虽然@Component Javadoc从3.2开始建议将它用于MavenProject ,但显然已弃用并且建议从3.3开始被删除; maven-plugin-tools-annotations (截至3.3) 建议的习语是这样的(两者似乎都有效):

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

现在首选的语法是:

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

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

  org.apache.maven maven-project 2.0.6  

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