我有两个使用相同的重复方法的插件。然后我想重构并将该方法移动到共享类并将其托管在依赖项 jar 中。
这些方法需要一些maven属性,如MavenProject,PluginDescriptor和其他一些曾经注入到mojo中的maven类。
是否有这样的属性可以直接注入到共享类中?
还是我需要将它们注入 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;
}
Mojo 注释和 Component/JSR330 注释之间是有区别的:它们有不同的用途,注入的方式也不同。但是,可以有一个抽象/共享的Mojo。看看万无一失的项目:万无一失的插件和故障安全插件都在一个单独的模块中有一些共享的Mojo代码和配置(http://maven.apache.org/surefire/maven-surefire-common/index.html)