quickstartのアーキタイプを使用して新しいMavenプロジェクトを生成するMavenCli
をラップする小さなutilを作成しました。Mavenプラグイン内でのMavenCliの呼び出しが失敗しました
ユニットテストとしてUtil
を実行すると、非常にうまくいっています(空のMavenプロジェクトを生成するだけです)。
今、この小さなラッパーをMavenプラグインに統合したいと考えています。しかし、私は(第3 Mavenプロジェクト内)モジョを実行すると、MavenCli
の呼び出しが例外で失敗します。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);
}
関連する依存関係:
[ERROR] Error executing Maven.
[ERROR] java.util.NoSuchElementException
role: org.apache.maven.eventspy.internal.EventSpyDispatcher
roleHint:
[ERROR] Caused by: null
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(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の依存関係が含まれています。
私が言及した3番目のプロジェクトは、mojoプロジェクトに依存する空の "maven-quickstart"プロジェクトと、mojoがコンパイル段階で実行するための設定です。
私は単体テストのコンテキストでは動作するが、mojoのコンテキストでは動作しない理由は知らない。
誰でも手伝いできますか?
あなたにたくさんありがとう - 私が示唆したようにAPIを呼び出し側に切り替え - そしてそれはかなりうまく動作します。注:Embedder APIを使用する前に、私はすでにmojo-executorを使用しようとしましたが、成功しなかったので、ライフサイクル全体(例えば "install")を実行するのが難しいため、mojo-executorは "archetype:generate"他のプロジェクトでmojoを呼び出そうとすると設定が難しい(特に、この他のプロジェクトが現在のビルドの範囲外にある場合) –
実際にはクラスローディングの問題を処理し、 'MavenCli'を使用することができます。回答。 –