如何在Maven中指定依赖项的仓库

104
在具有多个依赖项和存储库的项目中,Maven 下载依赖项的尝试和错误方法有些繁琐和缓慢,因此我想知道是否有任何方法可以为某些声明的依赖项设置特定的存储库。
例如,我希望 bouncycastle 直接检查 BouncyCastle 的 Maven 存储库 http://repo2.maven.org/maven2/org/bouncycastle/,而不是官方 Maven。
3个回答

59

不可能。Maven会按照声明仓库的顺序检查,直到找到给定的构件被解析(或未解析)。

但是一些仓库管理器可以实现类似的功能。例如,Nexus有一个路由功能,可以实现相应的功能。


1
谢谢!我确信这是不可能的,但我想从其他Maven用户那里了解一下。我只是减少了定义的存储库并创建了一个本地存储库。 - Dario Castañé
14
这将是Maven一个很好的补充,我已经提出请求。这将使得Maven可以在Github世界中发挥作用。 - TimP
2
截至2019年1月,Gradle现在已经可以实现这一点(尽管我还没有尝试过)。请参见https://dev59.com/wmMm5IYBdhLWcg3wduxV#54465569。 - Net Wolf
Gradle有exclusiveContent功能,可以从单个仓库中检索依赖项。 - Igor

27

我已经将第三方仓库中的库移动到了它们自己的项目中,并将该项目作为基础项目中的第一个模块包含:

base/pom.xml

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

基础/第三方/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>

基础/mymodule/pom.xml:

<dependencies>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>thirdparty</artifactId>
        <version>${project.version}</version>
        <type>pom</type>
    </dependency>
    ...
</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>

6
这不是解决方案,这样Maven将始终尝试从两个库中下载每个依赖项。 - Luciano Brum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接