我正在开发一个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并将配置对象传递给汇编读取器,但这看起来像是一个小问题。有更优雅/正确的方式吗?