如何在Maven Mojo中使用MavenBuildHelper



我正在开发带有多个mojos的maven-plugin。在其中一个中,我的目标是将其他工件附加到我的项目中。类似于maven-build-helper-plugin的附件。但是我不想使用任何给定的构建插件,我想通过我的Mojo进行。

我知道我必须使用mavenprojecthelper.attachartifact。因为mavenproject.attachartifact被弃用。

我现在拥有的是(在Mojo.java中):

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

execute方法:

projectHelper.attachArtifact(project, "plugin", file);

但问题是,MavenProjectHelper的默认值不是${helper}。这就是为什么我会收到以下错误:

Failed to execute goal com.company.product.repo:my-plugin:1.0.1:attach-artifact (default) on project consumer-plugin: The parameters 'projectHelper' for goal com.company.product.repo:my-plugin:1.0.1:attach-artifact are missing or invalid -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginParameterException

如何给它正确的值?像MavenSession${session}一样,我假设MavenProjectHelper具有默认值。如果是这样,那是什么?如果不是,那么我该如何将正确值给MavenProjectHelper参数?

MavenProjectHelper是丛组件,而不是插件参数,应通过用@org.apache.maven.plugins.annotations.Component注释来注入它:

用于配置MavenPluginManager.getConfiguredMojo(...)的丛组件的注入。

因此,您应该拥有:

@Component
private MavenProjectHelper projectHelper;

此注释就像@Parameter一样,带有用于注释的插入工具,您可以在Maven插件的POM中声明

<dependency>
  <groupId>org.apache.maven.plugin-tools</groupId>
  <artifactId>maven-plugin-annotations</artifactId>
  <version>3.5</version>
  <scope>provided</scope>
</dependency>

进一步澄清,您可以在PluginParameterExpressionEvaluator类的Javadoc中记录到@Parameter的内容(除其他外,session用于MAVEN会话,project用于当前MAVEN项目或mojoExecution用于当前Mojo执行)。>

相关内容

  • 没有找到相关文章

最新更新