将默认Maven项目注入其他Maven组件

时间:2014-04-24 14:42:03

标签: java maven maven-plugin maven-mojo

我正在开发一个Maven插件,我使用Assembly API来进行一些自定义程序集构建。当我的代码运行时,我得到了这个堆栈跟踪:

java.lang.NullPointerException: null
    at org.apache.maven.plugin.assembly.interpolation.AssemblyInterpolator.buildInterpolator(AssemblyInterpolator.java:177)
    at org.apache.maven.plugin.assembly.interpolation.AssemblyExpressionEvaluator.(AssemblyExpressionEvaluator.java:44)
    at org.apache.maven.plugin.assembly.io.DefaultAssemblyReader.mergeComponentsWithMainAssembly(DefaultAssemblyReader.java:470)
    at org.apache.maven.plugin.assembly.io.DefaultAssemblyReader.readAssembly(DefaultAssemblyReader.java:390)
    at org.apache.maven.plugin.assembly.io.DefaultAssemblyReader.addAssemblyFromDescriptor(DefaultAssemblyReader.java:328)
    at org.apache.maven.plugin.assembly.io.DefaultAssemblyReader.readAssemblies(DefaultAssemblyReader.java:120)

据我所知,这是由DefaultAssemblyReader无法访问插件的默认Maven项目引起的。在我的mojo中,我已经宣布了Maven项目和汇编阅读器:

@Component (role=org.apache.maven.project.MavenProject.class, hint="default")
protected MavenProject project;

@Component(role=org.apache.maven.plugin.assembly.io.AssemblyReader.class, hint="default")
protected AssemblyReader defaultReader;

AssemblyReader类没有任何setter来设置项目,我不确定如何将project注入defaultReader。我想到的一个解决方案是扩展SingleAssemblyMojo并为项目设置一个setter并将配置对象传递给汇编读取器,但这看起来像是一个小问题。有更优雅/正确的方式吗?

0 个答案:

没有答案