我創建了一個小實用程序來包裝MavenCli
,它使用quickstart原型生成一個新的Maven項目。在Maven插件中調用MavenCli失敗
作爲單元測試執行Util
時,它工作得很好(只是生成一個空的Maven項目)。
現在我想將這個小包裝器集成到Maven插件中。但是,當我執行的魔力(第三Maven項目內),的MavenCli
調用失敗,出現異常:
[ERROR] Error executing Maven.
[ERROR] java.util.NoSuchElementException
role: org.apache.maven.eventspy.internal.EventSpyDispatcher
roleHint:
[ERROR] Caused by: null
的util的樣子:
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的依賴關係。
我提到的第三個項目是一個空的「maven-quickstart」項目,它依賴於mojo-project和mojo在編譯階段執行的配置。
我不知道它爲什麼在單元測試的情況下工作,但不是在一個mojo的情況下。
任何人都可以幫忙嗎?
謝謝了很多 - 我切換到調用API的建議 - 它工作得很好。注意:在我使用Embedder API之前,我已經嘗試過使用mojo-executor,但沒有成功,因爲執行整個生命週期很困難(例如「安裝」) - mojo-executor正在爲「archetype:generate」工作,但在嘗試調用另一個項目的mojo時也很難配置(特別是當這個其他項目完全超出當前構建的範圍時) –
實際上可以處理類加載問題並使用'MavenCli',請參閱我的回答。 –