我們有一個項目取決於Aspose Words的com.aspose:aspose-words:16.10.0:jdk16
。如何解決Maven/Gradle中幾個級別間接缺失的依賴項地獄?
POM爲aspose-words
聲明沒有依賴關係,但事實證明這是一個謊言。它實際上使用jai-core
,其最新版本是javax.media:jai-core:1.1.3
。
雖然jai-core
的POM也存在 - 它聲明不依賴,但實際上取決於jai-codec
,它在com.sun.media:jai-codec:1.1.3
。
獲得這些項目來修復事情似乎不切實際。 JAI基本上是一個死的項目,Maven Central不知道誰加了POM,所以沒有人負責修復元數據。 Aspose拒絕在沒有測試的情況下修復它,即使你可以向他們顯示他們自己的代碼做錯了,即使他們修復了它,他們也會在jai-core:1.1.3
上增加依賴,這隻能解決一半的問題。
如果我看看我們的整個依賴關係樹,這只是問題的一個例子。其他人正在潛伏,被其他依賴鏈所掩蓋,恰巧拉入了缺失的依賴關係。在某些情況下,我們甚至會向項目報告POM問題,但他們只是說他們的依賴「不是真實的」,儘管他們的類明確提到了另一個庫中的類。
我能想到的幾個同樣尷尬的選擇:
- 創建
jai-core:1.1.3.1
和aspose-words:16.10.0.1
,並解決他們的POM包括缺少的相關性,但誰在未來的更新他們會做同樣的事情。另外,任何其他庫我不知道哪些恰好取決於jai-core
也必須更新。 - 從我們自己的項目中添加依賴項,儘管它確實不是一個項目。
- 編輯現在有的版本的POM直接解決問題,只是告誡人們可能緩存了錯誤的版本。
所以我想我有這個兩個相關的問題:
- 是否有解決這個不正確方式?看起來任何非玩具項目最終都會遇到這個問題,所以沒有一個明顯正確的方法來解決這個問題令人擔憂。
- 有沒有辦法阻止不正確的依賴關係元數據進入工件服務器?因爲團隊中的其他開發人員正在添加依賴關係而沒有正確檢查事情,因此當一年後發生一些事情時,我會留下來清理它們的錯誤。
如果使用特定的依賴關係,您可以使用Enforcer插件來失敗構建...但每個庫都由其團隊維護..如果他們拒絕修復事情,然後把它叉起來並自己修復是最好的選擇。這確實意味着你必須以常規的方式將原創新增加的內容合併到你自己的分支中。但是,如果它已經死了......不會有任何東西。但Aspose不是我認爲的開源軟件?所以可能會有許可問題。另一種解決方案是:創建一個包裝器POM,依賴於Aspose和它需要的每個庫,然後依賴這個包裝器POM。 – Tunaki
請閱讀[Aspose.Words附加依賴關係](https://docs.aspose.com/display/wordsjava/System+Requirements#SystemRequirements-AdditionalDependencies)。你能分享你的用例的完整細節嗎?然後我會爲您提供有關您的查詢的更多信息。我與開發者傳道者一起工作。 –
@TahirManzoor在這種特殊情況下,我們使用Aspose將DOC轉換爲PDF。一個DOC碰巧包含BMP,由於某種原因,Aspose使用JAI來讀取BMP。這似乎是一個遺留問題,因爲我無法獲得Word的現代版本來創建此類文檔,所以我正在等待有關哪個版本的Word創建它的更多信息,以便我可以挖掘該版本的VM並嘗試製作測試文件。 – Trejkaz