17

現在のプロジェクトでMavenターゲットを実行する必要があるintelliJプラグインを作成しようとしています。インターチューブでのすべての話は、MavenEmbedderを使用することを推奨しています。それで頑張ってください。2.0.4バージョンは十分にサポートされておらず、その使用方法に関するリファレンスはありません。

私はそれに旋回を与え、埋め込みが必要なすべてのフィールドで初期化されていない壁にぶつかりました。リフレクティブプライベートメンバーインジェクション?素晴らしい!オブジェクトを初期化するための明白な方法が必要なのはなぜですか?

2.1バージョンを使用して成功している人もいるようです。私はそれを瓶や情報源でさえ見つけることができませんでした。

embedderプロジェクトの3.0バージョンを確認しました:http://maven.apache.org/ref/3.0-beta-3/maven-embedder/ MavenEmbedderオブジェクトをすべて削除し、アクセスのみをサポートしているようです。 MavenCliのmainメソッドまたはdoMainメソッドを使用します。誰かがこれらの方法を使用し、いくつかのアドバイスを与えることができますか?

4

6 に答える 6

25

ええ、MavenCliのドキュメンテーションの邪魔になることはあまりありません。APIは非常に単純ですが、それでもいくつかの例が必要です。これが機能するものです...

MavenCli cli = new MavenCli();
int result = cli.doMain(new String[]{"compile"},
        "/home/aioffe/workspace/MiscMaven",
        System.out, System.out);
System.out.println("result: " + result);

dirを取り、「コンパイル」フェーズを実行します。

于 2011-06-06T17:04:56.553 に答える
14

のMaven構成の動作maven 3.6.3

コード

MavenCli cli = new MavenCli();
System.setProperty("maven.multiModuleProjectDirectory", workingDirectory);
cli.doMain(new String[]{"compile"}, workingDirectory, System.out, System.err);

依存関係

<dependencies>
    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-embedder</artifactId>
        <version>3.6.3</version>
    </dependency>
    <!-- https://issues.apache.org/jira/browse/MNG-5995 -->
    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-compat</artifactId>
        <version>3.6.3</version>
    </dependency>

    <!-- enable logging -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.30</version>
    </dependency>
</dependencies>
于 2013-11-11T10:37:46.377 に答える
6

提供されたスコープと動的に取得されたコンポーネントの依存関係マトリックス情報は、少し混乱する可能性があります。直接または推移的な依存関係によって必要なすべてのアイテムを取得したように見えたので、それは私にとってでしたが、リモート解決は機能しませんでした。

Maven 3.3.3にジャンプしたかった(2015年5月25日現在)。ここ(および他の場所)で指定されているものの現在のバージョンに楽観的に更新しようとしたときに表示されるsisuエラーなしで動作しました。これは、JDK8を使用して本日現在指定されている例で機能するタグ付きのプロジェクトです。

https://github.com/mykelalvis/test-maven-embedder/tree/20150525-working

関連する部門(SLF4Jは、ログを表示できるようにするためのものです)

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.5</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-embedder</artifactId>
        <version>3.3.3</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.aether</groupId>
        <artifactId>aether-connector-basic</artifactId>
        <version>1.0.2.v20150114</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.aether</groupId>
        <artifactId>aether-transport-wagon</artifactId>
        <version>1.0.2.v20150114</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-http</artifactId>
        <version>2.9</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-provider-api</artifactId>
        <version>2.9</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-http-lightweight</artifactId>
        <version>2.9</version>
    </dependency>   

これを実行すると:

rm -r ~/.m2/repository/org/apache/maven/plugins/maven-clean-plugin/
mvn exec:java

おそらくそれをある種のユニットテストにすべきだったでしょう。

誰かが組み込みMaven3.3.3の優れたソリューションを持っている場合(つまり、必要な依存関係のより小さなまたはより範囲指向のセットを思いついた場合)、それらを投稿してください。

于 2015-05-25T13:47:50.587 に答える
0

@StevePerkinsからのコメントに基づいて、Mavenバージョン3.1.0を使用して、

それを機能させるには、aether-connector-wagonからwagon-provider-apiへの推移的な依存関係を除外する必要がありました。

pom.xml:

(...)
<dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-embedder</artifactId>
    <version>3.1.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.eclipse.aether</groupId>
    <artifactId>aether-connector-wagon</artifactId>
    <version>0.9.0.M2</version>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.apache.maven.wagon</groupId>
            <artifactId>wagon-provider-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.apache.maven.wagon</groupId>
    <artifactId>wagon-http</artifactId>
    <version>2.5</version>
    <scope>test</scope>
</dependency>
(...)

これがJavaの例です。

(...)
MavenCli cli = new MavenCli();

ByteArrayOutputStream baosOut = new ByteArrayOutputStream();
ByteArrayOutputStream baosErr = new ByteArrayOutputStream();

PrintStream out = new PrintStream(baosOut, true);
PrintStream err = new PrintStream(baosErr, true);

cli.doMain( new String[] { "clean" }, new File("."), out, err );

String stdout = baosOut.toString("UTF-8");
String stderr = baosErr.toString("UTF-8");
(...)

ここに完全な例

于 2013-09-22T14:19:27.417 に答える
0

maven-embedderのバージョンごとに依存関係マトリックスがあります(例:3.2.5):http: //maven.apache.org/ref/3.2.5/maven-embedder/dependencies.html

それに基づいて、、、およびを使用する必要がorg.apache.maven:maven-embedder:jar:3.2.5ありorg.apache.maven:maven-aether-provider:jar:3.2.5ましorg.apache.maven.wagon:wagon-provider-api:jar:2.8た。

このバージョンは18.0を使用しているため、非常に古いGuavaライブラリへの依存関係も修正されます。

于 2015-02-09T13:19:52.240 に答える
0

Spring Boot 2.3プロジェクト(JDK8またはJDK 11ランタイム)で動作するMaven Embedded 3.6.3バージョンの依存関係リスト:

    <!-- Maven Embedder -->
    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-embedder</artifactId>
        <version>3.6.3</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-compat</artifactId>
        <version>3.6.3</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-http</artifactId>
        <version>3.3.4</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.aether</groupId>
        <artifactId>aether-connector-basic</artifactId>
        <version>1.1.0</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.eclipse.aether</groupId>
        <artifactId>aether-transport-wagon</artifactId>
        <version>1.1.0</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.30</version>
    </dependency>
    <dependency>
        <groupId>org.usefultoys</groupId>
        <artifactId>slf4j-toys</artifactId>
        <version>1.6.3</version>
    </dependency>

MavenCLIコマンドは次のようになります。

    // Maven CLI to execute Maven Commands
    MavenCli cli = new MavenCli();
    int result = cli.doMain(args, workingDirectory,
                    org.usefultoys.slf4j.LoggerFactory.getInfoPrintStream(LOGGER),
                    org.usefultoys.slf4j.LoggerFactory.getErrorPrintStream(LOGGER));

HTH

于 2020-07-15T07:10:56.030 に答える