我正在开发一个maven插件。我似乎很难搞清楚,从执行MOJO的项目中获取POM信息的好方法是什么?
例如,如果我在另一个maven项目中执行我的mojo,我想获得项目名称或其他一些参数。
还有一件事,在AbstractMojo.java类中有一个上下文MAP有私有Map pluginContext,如果我错了可能会有人纠正我,但这是假设用于在mojos之间传递信息吗?
答案 0 :(得分:35)
您可以使用如下所示的字段将当前的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>
答案 1 :(得分:20)
@Component
private MavenProject project;
如果使用新的maven-plugin-annotations
,这也是有效的(更简洁和直观),这是从maven-archetype-plugin
创建的新mojos的默认设置。
编辑(感谢@bmargulies):虽然从@Component
开始MavenProject
Javadoc建议将其用于maven-plugin-tools-annotations
,但显然已经弃用,并且建议从中删除3.3; @Parameter(defaultValue="${project}", readonly=true, required=true)
private MavenProject project;
{{1}}(截至3.3)是这样的(两者似乎都有效):
{{1}}
答案 2 :(得分:9)
首选语法是:
@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>
(感谢已经提供此信息的其他人。这个答案将它们合并到一个地方。)
答案 3 :(得分:1)
请参见Tutorial: How to Create a Maven Plugin:
<dependency>
<!-- needed when injecting the Maven Project into a plugin -->
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
<version>3.6.3</version>
<scope>provided</scope>
</dependency>
@Parameter(property = "project", readonly = true)
private MavenProject project;
答案 4 :(得分:-1)
maven-project
已被maven 3.x版本的maven-model
替换,因此对于新项目,请使用
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-model</artifactId>
<version>3.6.3</version>
</dependency>