Maven快照依赖项

Maven快照依赖项,maven,maven-3,Maven,Maven 3,有两个项目p-m和p-d。它们是单独的詹金斯项目,可以单独建造。P-m依赖于P-d,它是快照版本依赖关系 最近,在构建p-m期间发生了一个问题。它抱怨无法从远程存储库下载P-d jar,并出现以下错误:PKIX路径生成失败:sun.security.provider.certpath.SunCertPathBuilderException 尽管该错误表明JVM证书可能存在问题,但它看起来不像来自同一远程存储库的其他JAR可以成功下载 如果先手动构建p-d(本地存储库有一个p-d快照jar,远程存

有两个项目p-m和p-d。它们是单独的詹金斯项目,可以单独建造。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):

  • maven应该动态构建依赖关系,还是只使用存储库中最新的依赖关系?例如,P-m依赖于P-d。P-m会在存储库中使用最新版本的P-d吗(如果P-d jar不可用,它会抱怨找不到P-d),还是每次P-m构建时P-m都会构建P-d?什么决定了什么行为?我观察了第二种情况(每次P-m构建时,它都会在远程存储库中打包一个新的P-d jar,而不将P-d jar安装到本地存储库),但我不明白为什么——是什么让它生成了一个新的P-d jar(只有部署到远程存储库的时间戳P-d jar,而本地存储库中没有新的快照P-d jar)不要使用最新的P-d罐

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


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

    您描述了如果项目是在本地构建的,那么问题就不存在了——这就是不必联系支持上述理论的存储库服务器的时候

    查看一个教程,比如(有很多)如何将存储库的公共证书添加到maven的truststore

    但要回答你的问题:

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

  • 您是否确认Maven仍然下载其他依赖项?毕竟它们被缓存了,所以除非您清除缓存或修改依赖项(名称/版本),否则就没有必要再这样做了——您提到最近发生了这种情况。要清除缓存,请签出


  • 非常感谢。我确信其他成功下载的依赖项——可以通过本地存储库中的日志和时间戳进行验证。只有每次以某种方式自动构建的这个jar(我不确定它是否是“构建”,因为它不会将新生成的快照jar安装到本地存储库,而是只将新生成的jar部署到远程存储库)不能使用SunCertPathBuilderException下载。我很困惑,如果是SSL证书问题,为什么其他JAR可以成功下载?我清理了缓存,它仍然有同样的问题。你能澄清一下你在“除非它们是当前项目的子项目”中所说的“子项目”是什么意思吗?如何查看它是否是“子项目”?对于子项目,我指的是Maven的术语模块。我的回答不好,我编辑了答案。但令人困惑的是,只有一个罐子有问题。证书是否用于其他领域?这是一个有签名的罐子吗?