我有两个使用相同重复方法的插件。我想重构然后将该方法移动到共享类并将其托管在依赖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;
}
答案 0 :(得分:0)
Mojo注释和Component / JSR330注释之间存在差异:它们具有不同的用途并且注入不同。但是,可以有一个抽象/共享Mojo。看一下surefire项目:surefire-plugin和failsafe-plugin都在一个单独的模块中有一些共享的Mojo代码和配置(http://maven.apache.org/surefire/maven-surefire-common/index.html)