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
(感谢已经提供此信息的其他人。这个答案将它们组合在一个地方。)