【问题标题】:How to specify a repository for a dependency in Maven如何在 Maven 中为依赖项指定存储库
【发布时间】:2011-03-11 05:53:55
【问题描述】:

在具有多个依赖项和存储库的项目中,Maven 用于下载依赖项的尝试和错误方法有点麻烦和缓慢,所以我想知道是否有任何方法可以为某些已声明的依赖项设置特定的 repo。

例如,我想让 bouncycastle 直接检查 BouncyCastle 的 Maven 仓库http://repo2.maven.org/maven2/org/bouncycastle/ 而不是官方的 Maven。

【问题讨论】:

    标签: maven-2 dependencies


    【解决方案1】:

    这篇文章可能很旧,但可能对某人有用。我在 pom.xml 中指定了两个存储库,如下所示,它起作用了。

    <repositories>
            <repository>
                <id>AsposeJavaAPI</id>
                <name>Aspose Java API</name>
                <url>http://repository.aspose.com/repo/</url>
            </repository>
            <repository>
                <id>Default</id>
                <name>All apart from Aspose</name>
                <url>https://repo.maven.apache.org/maven2/</url>
            </repository>
        </repositories>
    

    【讨论】:

    • 这不是解决方案,这样 Maven 将始终尝试从两个存储库下载每个依赖项。
    【解决方案2】:

    我已将库从 3rd 方存储库移至他们自己的项目,并将该项目作为第一个模块包含在我的基础项目中:

    base/pom.xml

    ...
    <modules>
        <module>thirdparty</module>
        <module>mymodule</module>
        ...
    </modules>
    

    base/thirdparty/pom.xml:

    ...
    <artifactId>thirdparty</artifactId>
    <packaging>pom</packaging>
    
    <repositories>
        <repository>
            <id>First thirdparty repository</id>
            <url>https://...</url>
        </repository>
        ...
    </repositories> 
    
    <dependencies>
        <dependency>
           <!-- Dependency from the third party repository -->
        </dependency>
        ....
    </dependencies>
    

    base/mymodule/pom.xml:

    <dependencies>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>thirdparty</artifactId>
            <version>${project.version}</version>
            <type>pom</type>
        </dependency>
        ...
    </dependencies>
    

    这将确保在构建根项目后立即将第三方存储库中的库下载到本地存储库中。对于所有其他依赖项,存储库是不可见的,因此在下载时不包括在内。

    【讨论】:

      【解决方案3】:

      不可能。 Maven 按照声明顺序检查存储库,直到给定的工件得到解决(或没有解决)。

      一些存储库管理器可以做一些接近这个的事情。例如,Nexus 有一个 routes 功能,可以做类似的事情。

      【讨论】:

      • 谢谢!我确信这是不可能的,但我想从其他 Maven 用户那里知道。我只是减少了定义的存储库并创建了一个本地存储库。
      • 这将是对 Maven 的一个很好的补充,我已经提出了要求。它将使 Maven 能够在 github 世界中工作。
      • 截至 2019 年 1 月,这在 Gradle 中是可能的(尽管我还没有尝试过)。见stackoverflow.com/a/54465569
      猜你喜欢
      • 2021-05-30
      • 2021-03-22
      • 2018-11-14
      • 2012-01-10
      • 1970-01-01
      • 1970-01-01
      • 2011-07-22
      • 1970-01-01
      • 2015-02-17
      相关资源
      最近更新 更多