2

私はmavenプロジェクトを持っています。この意味でプロジェクトを解決するために、すべての依存関係を同期/ダウンロードしたいと考えています。を使用して、Javaから作成したいMaven CLI API

「mvn clean validate」と同じはずのメソッドがあります。

public static void syncProjectDeps(String projectPath) {

    MavenCli cli = new MavenCli();
    int result = cli.doMain(new String[]{"clean", "validate"}, projectPath, System.out, System.out);

    System.out.println(result);

}

ただし、次の例外で失敗します (リポジトリ セントラルにアクセスするためのコネクタがありません)。

INFO] Scanning for projects...
[ERROR]   The project com.mycompany.common:configuration:2.0.3-SNAPSHOT (C:\store\myproject\java\trunk\configuration\pom.xml) has 1 error
 ...
 No connector available to access repository central (http://repo.maven.apache.org/maven2)

<repositories>のプロジェクトのpom.xml.

それを機能させる方法は何ですか?

4

2 に答える 2

1

リモート http リポジトリのコネクタの名前はwagonです。プロジェクトを次のように構成します。

<dependencies>
    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-embedder</artifactId>
        <version>3.1.1</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.aether</groupId>
        <artifactId>aether-connector-wagon</artifactId>
        <version>0.9.0.M2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-http-lightweight</artifactId>
        <version>2.5</version>
    </dependency>
</dependencies>
于 2013-11-11T10:34:00.750 に答える
1

Ok。答えを見つけたようです。

答えはここにありました:

プログラムで org.apache.maven.cli.MavenCli を使用する良い例を誰か教えてください。

そしてここ:

https://groups.google.com/forum/#!topic/daisy-pipeline-dev/tubf3KXClM4

http://code.google.com/p/phloc-parent-pom/source/browse/trunk/pom.xml?r=47

基本的に、この pom.xml で終わるはずです (すべて依存関係についてです!):

<!-- maven api-->
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-embedder</artifactId>
            <version>3.0.5</version>
        </dependency>
        <dependency> <!-- https://stackoverflow.com/questions/4206679/can-anyone-give-a-good-example-of-using-org-apache-maven-cli-mavencli-programatt -->
            <groupId>org.sonatype.aether</groupId>
            <artifactId>aether-connector-wagon</artifactId>
            <version>1.13.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.maven.wagon</groupId>
            <artifactId>wagon-http</artifactId> <!-- https://groups.google.com/forum/#!topic/daisy-pipeline-dev/tubf3KXClM4 -->
            <version>2.1</version>     <!-- http://code.google.com/p/phloc-parent-pom/source/browse/trunk/pom.xml?r=47 -->
        </dependency>
        <dependency>
            <groupId>org.codehaus.plexus</groupId>
            <artifactId>plexus-utils</artifactId>
            <version>3.0.10</version>
        </dependency>

次に、次のようなエラーが発生した場合:

Non-resolvable parent POM: Failure to find com.mycompany.common:commons:pom:2.0.6

次に、親プロジェクトに正しいバージョンを使用していることを確認してください。親には、実際のローカル ルート pom.xml と同じバージョンが必要です。

それでもエラーが発生する場合、親へのパスは次のようになります。

 <relativePath>../pom.xml</relativePath>

これは実際にはデフォルト値です。しかし、あなたの場合はそうかもしれません

 <relativePath>../../pom.xml</relativePath>

あなたがより深いフォルダ構造を持っている場合(私が持っていたように)


  • 私のクライアントコードは次のとおりです。

        System.setProperty("user.home", "C:\\my"); // ~/.m2/repository lives here    
        MavenCli cli = new MavenCli();
    
       // THIS IS IMPORTANT AS WELL  !!!
       int result = cli.doMain(
                    new String[]{"-DincludeScope=runtime", "dependency:copy-dependencies", "clean", "validate"},
                    projectPath,
                    System.out,
                    System.out);
    

次のフォルダを作成しc:/.m2/repositoryます。でも今のところ空いてます。

于 2013-08-08T19:11:10.447 に答える