【问题标题】:Maven snapshot dependencyMaven 快照依赖
【发布时间】:2021-02-16 16:04:30
【问题描述】:

有两个项目 P-m 和 P-d。它们是可以单独构建的独立 Jenkins 项目。 P-m 依赖于 P-d,它是一个快照版本依赖。

最近在构建 P-m 的过程中出现了一个问题。它抱怨无法从远程存储库下载 P-d jar 并出现此错误:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException

虽然该错误表明 JVM 证书可能存在问题,但似乎无法成功下载来自同一远程存储库的其他 jar。

如果先手动构建 P-d(本地存储库有一个 P-d 快照 jar,远程存储库有已部署的时间戳 P-d jar),然后构建 P-m,它可以正常工作,因为它不会尝试从远程存储库下载 P-d jar。
但是几天后,P-d 没有任何变化,当 P-m 构建时(这次 P-d 不是手动构建的),它会动态调用 P-d 的包装,我不知道为什么。在这种情况下,本地存储库具有上次的 P-d 快照 jar,而远程存储库具有新部署的时间戳 P-d jar。然后它尝试从远程存储库下载这个新的时间戳 P-d jar,并且无法下载该 jar,并出现错误:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException

请帮助解决以下问题(不确定是否重要:使用的 maven 版本是 3.6.3):

  1. maven 应该即时构建依赖项还是只使用存储库中的最新依赖项?例如,P-m 取决于 P-d。 P-m 会只使用存储库中最新版本的 P-d(如果 P-d jar 不可用,它会抱怨找不到 P-d),还是每次 P-m 构建时 P-m 都会构建 P-d?是什么决定了哪种行为?我观察了第二种情况(每次 Pm 构建时,它都会在远程存储库中打包一个新的 Pd jar 而不将 Pd jar 安装到本地存储库),我不知道为什么----是什么使它生成了一个新的 Pd jar(仅带时间戳的 Pd jar 部署到远程存储库,而本地存储库中没有新的快照 Pd jar)并且不使用最新的 Pd jar?

  2. 为什么不能下载新生成的 P-d jar 并出现“PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException”?任何线索可能是什么问题?如前所述,除了这个新生成的 P-d jar 之外,其他所有 jar 都可以从同一个远程存储库成功下载,因此似乎不是构建机器的 JVM 证书问题。

【问题讨论】:

    标签: maven maven-3


    【解决方案1】:

    该错误表明 SSL 证书存在问题。 我猜远程存储库可以通过 https 访问,并且它可能已经更改了它的证书,因此客户端不再信任服务器并拒绝通信。它甚至不必是远程存储库服务器。您的组织设置了破坏 SSL 连接的代理服务器就足以发生此错误。

    如果项目是在本地构建的,则您描述的问题不存在 - 这是无需联系支持上述理论的存储库服务器的情况。

    查看https://resources.weboffice.vertigis.com/Documentation/WebOffice102/EN/howto_install_certs_to_truststore.htm 之类的教程(那里有很多)如何将存储库的公共证书添加到 maven 的信任库。

    但要回答你的问题:

    1. Maven 不应该自动构建依赖项,除非它们是当前项目的子项目(这指的是multi module projects)。它将尝试从存储库访问已编译的依赖项,优先选择本地的(也缓存)在远程之上。

    2. 您是否确认 Maven 仍会下载其他依赖项?毕竟它们被缓存了,所以除非您清除缓存或修改您的依赖项(名称/版本),否则无需再次这样做 - 您提到这最近发生了。要清理缓存,请查看https://stackoverflow.com/a/22671261/4222206

    【讨论】:

    • 谢谢!我确定其他依赖下载成功----可以通过本地仓库中的日志和时间戳来验证。只有这个每次都会自动构建的 jar(我不确定它是否是“构建”,因为它不会将新生成的快照 jar 安装到本地存储库,而只会将这个新生成的 jar 部署到远程存储库)无法下载SunCertPathBuilderException。我很困惑为什么其他jar可以成功下载如果是SSL证书问题?我清理了缓存,它仍然有同样的问题。
    • 您能否澄清一下“除非它们是当前项目的子项目”中的“子项目”是什么意思?怎么看是不是“子项目”?
    • 对于子项目,我指的是 Maven 的术语模块。我的错,我编辑了答案。但是看到只有一个罐子有问题仍然令人费解。证书是否在其他领域使用?它是一个签名的罐子吗?
    猜你喜欢
    • 2014-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    相关资源
    最近更新 更多