簡體   English   中英

Maven 快照依賴

[英]Maven snapshot dependency

有兩個項目 Pm 和 Pd。 它們是單獨的 Jenkins 項目,可以單獨構建。 Pm 依賴於 Pd,它是一個快照版本依賴。

最近在構建Pm的過程中出現了一個問題。 它抱怨無法從遠程存儲庫下載 Pd jar 並出現以下錯誤:PKIX 路徑構建失敗:sun.security.provider.certpath.SunCertPathBuilderException

盡管該錯誤表明 JVM 證書可能存在問題,但似乎無法成功下載同一遠程存儲庫中的其他 jar。

如果先手動構建 Pd(本地存儲庫有 Pd 快照 jar,遠程存儲庫有部署的帶時間戳的 Pd jar),然后構建 Pm,它可以正常工作,因為它不會嘗試從遠程存儲庫下載 Pd jar。
但是幾天后,在 Pd 沒有任何變化的情況下,當 Pm 構建時(這次 Pd 不是手動構建的),它會動態調用 Pd 的包裝,我不知道為什么。 在這種情況下,本地存儲庫具有上次的 Pd 快照 jar,遠程存儲庫具有新部署的時間戳 Pd jar。 然后它嘗試從遠程存儲庫下載這個新的時間戳 Pd jar 並且無法下載該 jar 並出現錯誤:PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException

請幫助解決以下問題(不確定是否重要:使用的 maven 版本是 3.6.3):

  1. maven 應該動態構建依賴關系還是只使用存儲庫中的最新依賴關系? 例如,Pm 取決於 Pd。 Pm 會只使用存儲庫中最新版本的 Pd(如果 Pd jar 不可用,它會抱怨找不到 Pd),還是每次 Pm 構建時 Pm 都會構建 Pd? 什么決定了哪種行為? 我觀察到了第二種情況(每次 Pm 構建時,它都會在遠程存儲庫中打包一個新的 Pd jar,而沒有將 Pd jar 安裝到本地存儲庫中),但我不明白為什么——是什么讓它生成了一個新的 Pd jar(僅部署到遠程存儲庫的時間戳 Pd jar,本地存儲庫中沒有新的快照 Pd jar)並且不使用最新的 Pd jar?

  2. 為什么不能下載新生成的 Pd jar 並顯示“PKIX 路徑構建失敗:sun.security.provider.certpath.SunCertPathBuilderException”? 任何線索可能是錯誤的? 如前所述,除了這個新生成的 Pd jar 之外,所有其他 jar 都可以從同一個遠程存儲庫成功下載,因此似乎不是構建機器中的 JVM 證書問題。

該錯誤表明 SSL 證書存在問題。 我猜遠程存儲庫可以通過 https 訪問,並且它可能已經更改了它的證書,因此客戶端不再信任服務器並拒絕通信。 它甚至不需要是遠程存儲庫服務器。 您的組織設置了破壞 SSL 連接的代理服務器就足以發生此錯誤。

如果項目是在本地構建的,則您描述的問題不存在 - 這是當不必聯系支持上述理論的存儲庫服務器時。

檢查像https://resources.weboffice.vertigis.com/Documentation/WebOffice102/EN/howto_install_certs_to_truststore.htm這樣的教程(有很多)如何將您的存儲庫的公共證書添加到您的 maven 的信任庫。

但是要回答您的問題:

  1. Maven 不應該自動構建依賴項,除非它們是當前項目的子項目(這是指多模塊項目)。 它將嘗試從存儲庫訪問已編譯的依賴項,更喜歡在遠程之上的本地(也緩存)。

  2. 您是否驗證了 Maven 仍然下載其他依賴項? 畢竟它們被緩存了,所以除非您清除緩存或修改您的依賴項(名稱/版本),否則無需再次執行此操作 - 您提到了最近發生的情況。 要清理緩存,請查看https://stackoverflow.com/a/22671261/4222206

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM