10

mvn を実行するプロセスを生成する理由を尋ねる前に、Maven API を介して Maven ビルドを実行して、ビルドで何が起こっているか、生成されたアーティファクトなどに関する情報を収集できるようにしたいと思いますorg.apache.maven:maven-core:jar:3.0.4。そのようなことをしようとして、次のメソッドを作成しました。

public static void build(File directory, File pom) {
    Maven maven = new DefaultMaven();
    MavenExecutionRequest exec = new DefaultMavenExecutionRequest();
    exec.setBaseDirectory(directory);
    exec.setPom(pom);
    MavenExecutionResult result = maven.execute(exec);
    MavenProject proj = result.getProject();
    Artifact art = proj.getArtifact();
    System.out.println(art);
}

ただし、このコードはmaven.executenull ポインター例外のために失敗します。これらの null ポインター例外はDefaultMaven、初期化されていないプライベート フィールドが原因で、基本的にどこにでもあります。それらはすべて で注釈が付けられている@Requiredため、これは Plexus と関係があると推測しています。

Maven を使用してそのようなビルドを正常に実行するにはどうすればよいですか?

4

3 に答える 3

3

実際のMaven埋め込みAPIを使用することをお勧めします。

http://maven.apache.org/ref/3.0/maven-embedder/apidocs/index.html

例を見るには、M2Eclipseのオープンソースに目を向けてください。

さて、このコンポーネントはあまりよく名付けられていません。これは実際には、CLIの作成を目的とした便利なラッパーです。だから、あなたがしたいことはそれのソースを読むことです。

于 2013-01-11T12:14:26.190 に答える
0

私は実際にこのAPIを使用したことはありませんが、面白そうです。

実行する目標をどこに設定しているのかわかりませんか?

setGoalsMaven実行リクエストで:を呼び出す必要がある場合があります。

http://maven.apache.org/ref/3.0.3/maven-core/apidocs/org/apache/maven/execution/DefaultMavenExecutionRequest.html#setGoals%28java.util.List%29

于 2013-01-11T10:34:08.773 に答える