【问题标题】:How to use MavenBuildHelper in Maven mojo如何在 Maven mojo 中使用 MavenBuildHelper
【发布时间】:2016-11-29 23:33:41
【问题描述】:

我正在开发一个带有多个 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参数正确的值?

【问题讨论】:

    标签: java maven maven-plugin mojo


    【解决方案1】:

    MavenProjectHelper 是 Plexus 组件,而不是插件参数,应通过使用 @org.apache.maven.plugins.annotations.Component 注释对其进行注解来注入:

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

    因此,您应该改为:

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

    为了进一步说明,PluginParameterExpressionEvaluator 类的 Javadoc 中记录了您可以使用 @Parameter 注入的内容(其中,session 用于 Maven 会话,project 用于当前 Maven 项目或 mojoExecution用于当前的 Mojo 执行)。

    【讨论】:

    • 谢谢!有效。如果我必须手动给出role 的值,它会是什么,我在哪里可以找到它?比如MavenResourcesFiltering,我用的是role = org.apache.maven.shared.filtering.MavenResourcesFiltering.class
    • @ChurchillNolan 角色默认为注解类型的类。例如,如果您想将某些内容注入到类型不是组件类的字段中,则需要它。示例:Archiver 有多个实现,例如 JarArchiver。如果您特别想要JarArchiver,而不是其他任何类型,那么您的字段将是JarArchiver 类型,因此您需要告诉角色是Archiver.class(因为JarArchiver 是角色@ 的一个组成部分987654346@)。通常,您会使用 hint,因为您需要区分要注入的内容类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 2016-06-02
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 2010-12-27
    相关资源
    最近更新 更多