Maven快照依赖项

时间:2020-11-03 23:04:29

标签: maven maven-3

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

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

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

如果首先手动构建Pd(本地存储库具有Pd快照jar,远程存储库具有已部署时间戳的Pd jar),然后构建Pm,则可以正常运行,因为它不会尝试从远程存储库下载Pd 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证书问题。

1 个答案:

答案 0 :(得分:0)

该错误表明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