【问题标题】:Multiple maven repositories with a known unknown host具有已知未知主机的多个 Maven 存储库
【发布时间】:2018-05-08 17:47:04
【问题描述】:

说明

我正在配置一个 maven 构建,以在两个不同的环境中执行,第一个在我的 localhost 中,第二个在使用 jenkins 的 docker 集群中。

两个版本都将使用相同的 pom.xml 文件。 在 pom.xml 文件中,我引用了一个私有的 nexus 存储库。

nexus 存储库位于 docker 集群内。

在 pom.xml 中定义的两个 URL 都重定向到同一个 nexus 存储库。

因此,要从我的本地主机访问 nexus 存储库,我们已经配置了私有 DNS 以将“git.consignet.intranet”解析为 nexus 存储库。 然后要访问 docker 中的 nexus repo,我可以只使用它的服务名称“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 中的服务名称来访问 repo 以解析到主机。

在 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 中的存储库?如果是这样,我该如何配置它?

【问题讨论】:

  • 告诉 maven 使用 localhost:8081,并根据您的环境使用端口转发/映射来指向最终位置。

标签: java maven docker nexus


【解决方案1】:

使用配置文件:

<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 构建,具体取决于您所处的环境。问题现在(希望)减少为读取环境标志。

【讨论】:

  • 虽然此答案提供了实现目标的替代途径,但这是否暗示可能不会以 OP 尝试的方式添加多个存储库? IE。如果无法访问,是否无法让 maven 忽略存储库?
猜你喜欢
  • 2017-12-12
  • 1970-01-01
  • 1970-01-01
  • 2013-03-13
  • 2016-10-02
  • 2018-08-25
  • 1970-01-01
  • 2013-03-10
  • 1970-01-01
相关资源
最近更新 更多