繁体   English   中英

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

[英]Java Maven MOJO - getting information from project POM

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

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

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

您可以使用如下声明的字段将当前的 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>
@Component
private MavenProject project;

如果使用新的maven-plugin-annotations也可以工作(更简洁直观),这是从maven-archetype-plugin创建的新 mojo 的默认设置。

编辑(感谢@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;

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

<dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-project</artifactId>
    <version>2.0.6</version>
</dependency>

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

请参阅教程:如何创建 Maven 插件

聚甲醛

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM