我的情况: 我基本上需要客户端实现 Artifactory 虚拟存储库。
我们被迫使用 GitLab(自托管)来管理每个项目的包,并使用完全不同的包管理器(nexus)来管理公共工件。由于本次讨论之外的各种原因,在 nexus 中使用组存储库是不可能的。
这意味着我必须配置 Maven 客户端来解析具有 2 个不同存储库的包:因此,像
org.apache.*
这样的东西将使用 Maven Central 进行解析,而 com.mycompany
将使用项目特定的存储库进行解析。我需要/想要这样做,这样它就超级便携且简单,因此它可以在用户计算机上构建或在 CI/CD 管道中构建,该管道也在从 1 个 GL 实例移动到另一个实例的过程中。
这个想法是,当我输入
mvn install
时,它将检查 Maven Central,发现 GAV FOO:BAR:1.0.0
不存在并回退到内部存储库。
我知道这些工件没问题,因为在我的测试中我已经镜像到*,并创建了一个虚拟/组存储库。我现在知道我不能这样做,因此我需要在客户端配置这种行为。
如何实现这一目标?
除非我没有正确理解这个问题,否则这是 Maven 的基本功能。您可以在 pom 或设置文件中定义
repositories
元素,并根据需要在其中列出任意数量的 repository
。在 pom 中这样做会更便携:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
...
<repositories>
<repository>
<id>central</id>
<url>https://repo.maven.apache.org/maven2</url>
</repository>
<repository>
<id>jitpack</id>
<url>https://jitpack.io</url>
</repository>
<repository>
<id>company-repo</id>
<url>https://repo.company.com/maven2</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>example-library</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>