如何在 Maven mojo 中使用 MavenBuildHelper
How to use MavenBuildHelper in Maven mojo
我正在开发一个包含多个 Mojo 的 maven 插件。其中之一,我的目标是将额外的工件附加到我的项目中。类似于 attach-artifact of 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
is a Plexus component, not a plugin parameter, and should be injected by annotating it with the @org.apache.maven.plugins.annotations.Component
注解:
Used to configure injection of Plexus components by MavenPluginManager.getConfiguredMojo(...)
.
因此,您应该改为:
@Component
private MavenProjectHelper projectHelper;
这个注释,就像 @Parameter
一样,带有注释的 Plugin Tools,你可以在你的 Maven 插件的 POM 中声明
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.5</version>
<scope>provided</scope>
</dependency>
为了进一步说明,您可以使用 @Parameter
is documented in the Javadoc of the PluginParameterExpressionEvaluator
class(其中,session
用于 Maven 会话,project
用于当前 Maven 项目或 mojoExecution
用于当前的 Mojo 执行)。
我正在开发一个包含多个 Mojo 的 maven 插件。其中之一,我的目标是将额外的工件附加到我的项目中。类似于 attach-artifact of 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
is a Plexus component, not a plugin parameter, and should be injected by annotating it with the @org.apache.maven.plugins.annotations.Component
注解:
Used to configure injection of Plexus components by
MavenPluginManager.getConfiguredMojo(...)
.
因此,您应该改为:
@Component
private MavenProjectHelper projectHelper;
这个注释,就像 @Parameter
一样,带有注释的 Plugin Tools,你可以在你的 Maven 插件的 POM 中声明
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.5</version>
<scope>provided</scope>
</dependency>
为了进一步说明,您可以使用 @Parameter
is documented in the Javadoc of the PluginParameterExpressionEvaluator
class(其中,session
用于 Maven 会话,project
用于当前 Maven 项目或 mojoExecution
用于当前的 Mojo 执行)。