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

时间:2012-05-15 18:00:45

标签: java maven pom.xml mojo

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

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

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

5 个答案:

答案 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

POM

        <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>

Mojo

@Parameter(property = "project", readonly = true)
private MavenProject project;

答案 4 :(得分:-1)

maven 2.x版本的

maven-project已被maven 3.x版本的maven-model替换,因此对于新项目,请使用

<dependency>
  <groupId>org.apache.maven</groupId>
  <artifactId>maven-model</artifactId>
  <version>3.6.3</version>
</dependency>