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

好的。看来我找到了答案。

答案在这里:

谁能给出一个以编程方式使用 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 回答
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 回答