2016-08-18 64 views
0

中獲取的存儲庫我想給出一個pom.xml文件,擴展傳遞依賴關係,並且對於每個直接和傳遞依賴關係,列出哪些存儲庫maven正在獲取它來自。如何獲得maven依賴關係列表以及它們從

隨着maven-dependency-plugin我可以做

mvn dependency:tree得到的傳遞依賴關係樹,但沒有儲存庫信息包括

mvn dependency:list-repositories習慣儲存庫的清單,但沒有相關性信息包括

mvn dependency:get -Dartifact=<...>可以獲取單個工件和傳遞依賴關係,但它看起來比需要的要多得多,而且我無法確定我真正關心的是哪一個。

+0

你想解決什麼樣的問題? – khmarbaise

+0

我試圖遷移我們的代碼庫以使用Bazel,它不支持傳遞依賴關係解析。我想用maven來解決依賴關係,使用輸出生成Bazel規則來下載和依賴,並讓Bazel做下載工作。 – Yunchi

回答

1

我不認爲有一個插件可以做到這一點。我認爲其中的原因是沒有人真的對這類信息感興趣。

考慮依賴到發佈文物。一旦他們被下載到你的本地倉庫,Maven就不會再次下載它們(除非你刪除它們);所有未來的解決方案都將通過當地的回購協議完成。

當然,在你的本地回購的神器目錄將包含它是從,其實際的URL可能會或可能不會隨着時間的推移同一下載回購的象徵名稱的文件_remote.repositories

這就是Maven座標是全局的。例如,(說)commons-codec:commons-codec:1.10的給定版本必須是相同的,無論它來自何處。否則,如果某些發佈會根據它們的來源而有所不同,那麼一切都會崩潰。正因爲如此,沒有人關心依賴從何而來。

快照依賴關係是一個不同的故事,但您不應該依賴它們太久,因爲您不想基於未來可能會發生變化的依賴來發布您的東西。通常情況下,你可以控制你的快照依賴關係來自哪裏,因此找到的地方就是你的依賴來自於

有時候,傳遞依賴將包括POM,它指定Maven從中獲取子依賴的附加回購。有時候,這些知識庫被分解或停止,打破依賴鏈。在這種情況下,您可能想要在您的settings.xml中阻止或重新路由它們。通過所有的POM一個簡單的掃描你的本地回購通常是足夠嗅出出來:

# Linux/Unix 
%> find <your local repo> -name '*.pom' | xargs grep -c '<repositories>' | grep -v ':0' 

這與mvn dependency:tree在一起,應該足夠,以找出是否傳遞依賴是依賴於一個行爲異常的存儲庫。

+0

感謝您的詳細解答。對於我的用例,我確實至少需要完整的依賴關係樹(請參閱我對該問題的評論)。如果dep已經是我的pom.xml中的直接依賴項,它看起來像'mvn dependency:tree'不報告傳遞依賴關係。有沒有辦法強制它枚舉完整的樹? – Yunchi

+0

'mvn dependency:tree -Dverbose = true'應該做的伎倆。 – Daniel