在具有多个依赖项和存储库的项目中,Maven 下载依赖项的试错方法有点麻烦且缓慢,所以我想知道是否有任何方法可以为某些声明的依赖项设置特定的存储库。
例如,我希望 bouncycastle 直接检查 BouncyCastle 的 Maven 存储库(位于 http://repo2.maven.org/maven2/org/bouncycastle/),而不是官方 Maven。
不可能。 Maven 按声明顺序检查存储库,直到给定的工件得到解析(或未解析)。
一些存储库管理器可以做一些接近这个的事情。例如,Nexus 有一个 routes 功能,可以执行相同的操作。
我已将库从第 3 方存储库移至他们自己的项目,并将该项目作为第一个模块包含在我的基础项目中:
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>
这将确保根项目构建后立即将第三方存储库中的库下载到本地存储库中。对于所有其他依赖项,存储库不可见,因此在下载时不包含在内。
我们创建了一个maven插件(严格来说,这是一个maven-enforcer-plugin自定义规则),它可以保证从指定存储库接收工件。这是一个 require-dependency-repository 规则。
这篇文章可能很旧,但可能对某人有用。我在 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>