具有已知未知主机的多个 Maven 存储库
Multiple maven repositories with a known unknown host
描述
我正在配置一个 Maven 构建,以在两个不同的环境中执行,第一个在我的本地主机中,第二个在使用 jenkins 的 docker 集群中。
两个版本将使用相同的 pom.xml 文件。
在 pom.xml 文件中,我引用了一个私有 nexus 存储库。
nexus 存储库位于 docker 集群内。
在 pom.xml 中定义的两个 URL 都重定向到同一个 nexus 存储库。
因此,为了从我的本地主机访问 nexus 存储库,我们配置了私有 DNS 以将 "git.consignet.intranet" 解析为 nexus 存储库。
然后要访问 docker 内的 nexus 存储库,我可以只使用它的服务名称 "nexus-repo".
pom.xml的相关内容如下:
<project>
...
<repositories>
<repository>
<id>nexus-aws</id>
<name>Nexus Amazon</name>
<url>http://nexus.consignet.intranet/repository/maven-releases/</url>
</repository>
<repository>
<id>nexus-cluster</id>
<name>Nexus Inside Cluster</name>
<url>http://nexus-repo/repository/maven-releases/</url>
</repository>
</repositories>
...
</project>
问题
在我的本地主机中构建时,我无法使用其在 docker 中的服务名称访问存储库以解析主机。
在 jenkins 内部构建时(在 docker 容器内),我无法访问我们的 DNS 服务器来解析 URL。
Maven 输出
Maven 抛出以下错误信息:
[ERROR] Failed to execute goal on project DB1ConsignetWebService: Could not
resolve dependencies for project DB1ConsignetWebService:DB1ConsignetWebService:war:1.0-SNAPSHOT:
Failed to collect dependencies at Consignet:jaxb-api:jar:2.2.7-facets-1.0.5:
Failed to read artifact descriptor for Consignet:jaxb-api:jar:2.2.7-facets-1.0.5:
Could not transfer artifact Consignet:jaxb-api:pom:2.2.7-facets-1.0.5
from/to my-repo1 (http://nexus-repo/repository/maven-releases/): nexus-repo:
Unknown host nexus-repo -> [Help 1]
最后的考虑
每个环境只能解析一个URL:
在开发环境里面,我就可以解析"git.consignet.intranet" dns。
在 jenkins 构建环境中,我将能够解析 "nexus-repo" dns。
问题
如果是未知主机,是否可以忽略 Maven 中的存储库?如果可以,我该如何配置?
使用配置文件:
<profiles>
<profile>
<id>dev</id>
<repositories>
<repository>
<id>nexus-aws</id>
<name>Nexus Amazon</name>
<url>http://nexus.consignet.intranet/repository/maven-releases/</url>
</repository>
</repositories>
</profile>
<profile>
<id>jenkins</id>
<repositories>
<repository>
<id>nexus-cluster</id>
<name>Nexus Inside Cluster</name>
<url>http://nexus-repo/repository/maven-releases/</url>
</repository>
</repositories>
<profile>
</profiles>
然后使用 mvn -Pjenkins
或 mvn -Pdev
进行构建,具体取决于您所处的环境。现在(希望)问题已减少为读取环境标志。
描述
我正在配置一个 Maven 构建,以在两个不同的环境中执行,第一个在我的本地主机中,第二个在使用 jenkins 的 docker 集群中。
两个版本将使用相同的 pom.xml 文件。 在 pom.xml 文件中,我引用了一个私有 nexus 存储库。
nexus 存储库位于 docker 集群内。
在 pom.xml 中定义的两个 URL 都重定向到同一个 nexus 存储库。
因此,为了从我的本地主机访问 nexus 存储库,我们配置了私有 DNS 以将 "git.consignet.intranet" 解析为 nexus 存储库。 然后要访问 docker 内的 nexus 存储库,我可以只使用它的服务名称 "nexus-repo".
pom.xml的相关内容如下:
<project>
...
<repositories>
<repository>
<id>nexus-aws</id>
<name>Nexus Amazon</name>
<url>http://nexus.consignet.intranet/repository/maven-releases/</url>
</repository>
<repository>
<id>nexus-cluster</id>
<name>Nexus Inside Cluster</name>
<url>http://nexus-repo/repository/maven-releases/</url>
</repository>
</repositories>
...
</project>
问题
在我的本地主机中构建时,我无法使用其在 docker 中的服务名称访问存储库以解析主机。
在 jenkins 内部构建时(在 docker 容器内),我无法访问我们的 DNS 服务器来解析 URL。
Maven 输出
Maven 抛出以下错误信息:
[ERROR] Failed to execute goal on project DB1ConsignetWebService: Could not
resolve dependencies for project DB1ConsignetWebService:DB1ConsignetWebService:war:1.0-SNAPSHOT:
Failed to collect dependencies at Consignet:jaxb-api:jar:2.2.7-facets-1.0.5:
Failed to read artifact descriptor for Consignet:jaxb-api:jar:2.2.7-facets-1.0.5:
Could not transfer artifact Consignet:jaxb-api:pom:2.2.7-facets-1.0.5
from/to my-repo1 (http://nexus-repo/repository/maven-releases/): nexus-repo:
Unknown host nexus-repo -> [Help 1]
最后的考虑
每个环境只能解析一个URL:
在开发环境里面,我就可以解析"git.consignet.intranet" dns。
在 jenkins 构建环境中,我将能够解析 "nexus-repo" dns。
问题
如果是未知主机,是否可以忽略 Maven 中的存储库?如果可以,我该如何配置?
使用配置文件:
<profiles>
<profile>
<id>dev</id>
<repositories>
<repository>
<id>nexus-aws</id>
<name>Nexus Amazon</name>
<url>http://nexus.consignet.intranet/repository/maven-releases/</url>
</repository>
</repositories>
</profile>
<profile>
<id>jenkins</id>
<repositories>
<repository>
<id>nexus-cluster</id>
<name>Nexus Inside Cluster</name>
<url>http://nexus-repo/repository/maven-releases/</url>
</repository>
</repositories>
<profile>
</profiles>
然后使用 mvn -Pjenkins
或 mvn -Pdev
进行构建,具体取决于您所处的环境。现在(希望)问题已减少为读取环境标志。