我创建了一个小 util 来 wrap MavenCli
,它使用快速入门原型生成一个新的 Maven 项目。
当Util
作为单元测试执行时,它工作得很好(只是生成一个空的 Maven 项目)。
现在我想将这个小包装器集成到一个 Maven 插件中。但是当我执行 mojo(在第三个 Maven 项目中)时,调用MavenCli
失败并出现异常:
[ERROR] Error executing Maven.
[ERROR] java.util.NoSuchElementException
role: org.apache.maven.eventspy.internal.EventSpyDispatcher
roleHint:
[ERROR] Caused by: null
该实用程序看起来像:
public void createProject() {
final MavenCli cli = new MavenCli();
System.setProperty("maven.multiModuleProjectDirectory", "/usr/share/maven");
cli.doMain(new String[] { "archetype:generate", "-DgroupId=com.my.company",
"-DartifactId=hello-world", "-DarchetypeArtifactId=maven-archetype-quickstart",
"-DinteractiveMode=false" }, "/tmp", System.out, System.out);
}
util的相关依赖:
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-embedder</artifactId>
<version>3.3.9</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
<version>3.3.9</version>
</dependency>
mojo 代码如下所示:
@Mojo(name = "custommojo", requiresProject = false)
public class CustomMojo extends AbstractMojo {
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
Util.createProject();
}
}
mojo 的 POM 仅包含对相关 Maven 工件(plugin-api、plugin-annotation 等)和 util.xml 的依赖项。
我提到的第三个项目是一个空的“maven-quickstart”项目,它依赖于 mojo-project 和 mojo 在编译阶段执行的配置。
我不知道为什么它在单元测试的上下文中起作用,但在 mojo 的上下文中却不起作用。
有人可以帮忙吗?