如何在 Maven 中为依赖项指定存储库

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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 中是可能的(尽管我还没有尝试过)。见***.com/a/54465569

以上是关于如何在 Maven 中为依赖项指定存储库的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Telosys 存储库添加为 Maven 依赖项?

如何从 Maven 存储库中清除旧的依赖项?

如何强制 IntelliJ 中的 Maven 从本地 .m2 存储库中提取特定依赖项

Maven:如何将本地 lib 目录用于依赖项而不是 Maven 存储库

如何手动禁用/黑名单 Maven 存储库

如何使用 Maven 在 MANIFEST.MF 中为 JBoss AS 7 生成模块依赖项?