使用Sisu将maven属性注入mojo

时间:2015-03-15 19:10:38

标签: maven inject mojo

我有两个使用相同重复方法的插件。我想重构然后将该方法移动到共享类并将其托管在依赖jar中。

这些方法需要一些maven属性,如MavenProject,PluginDescriptor和其他一些maven类,它们曾经被注入mojo。

是否有这些属性直接在共享类中注入?

或者我是否需要将它们注入mojo然后调用一些初始化方法?

我用@Named声明了共享类,并使用@Inject创建了一个构造函数。 mojo类也有一个构造函数(下面的代码)。 然后我试着跑了。所有值都正确地注入到mojo中,但共享类对象的内部属性值为null。

@Inject
public SharedValidationHelperDefault(final MavenProject project,
        final BuildContext buildContext,
        final RuntimeInformation runtimeInformation, final Log log) {
    this.buildContext = buildContext;
    this.project = project;
    this.runtimeInformation = runtimeInformation;
    this.log = log;
}

...

@Inject
public AbstractContainerPackMojo(
        final RuntimeInformation runtimeInformation,
        final MavenProjectHelper projectHelper,
        final BuildContext buildContext, SharedValidationHelper validationHelper) {
    this.validationHelper = validationHelper;
    this.buildContext = buildContext;
    this.runtimeInformation = runtimeInformation;
    this.projectHelper = projectHelper;
}

1 个答案:

答案 0 :(得分:0)

Mojo注释和Component / JSR330注释之间存在差异:它们具有不同的用途并且注入不同。但是,可以有一个抽象/共享Mojo。看一下surefire项目:surefire-plugin和failsafe-plugin都在一个单独的模块中有一些共享的Mojo代码和配置(http://maven.apache.org/surefire/maven-surefire-common/index.html