剛剛下載了m2e
Eclipse插件並喜歡它!我想知道它使用什麼Web服務來解決所有項目的傳遞依賴。用於依賴關係圖的Maven服務
我假設,它的工作原理是分析所有<dependency>
元素的出項目pom.xml
的,並使用一個服務來查詢Maven的每個傳遞依賴。
基本上,我問:m2e
如何填充存儲在~/.m2
處的本地Maven緩存?
剛剛下載了m2e
Eclipse插件並喜歡它!我想知道它使用什麼Web服務來解決所有項目的傳遞依賴。用於依賴關係圖的Maven服務
我假設,它的工作原理是分析所有<dependency>
元素的出項目pom.xml
的,並使用一個服務來查詢Maven的每個傳遞依賴。
基本上,我問:m2e
如何填充存儲在~/.m2
處的本地Maven緩存?
該插件的作用與Maven命令行程序mvn相同。
假設你的項目的POM和Maven設置文件不改變默認的存儲庫設置Maven會從Maven的中央下載文件
http://repo1.maven.org/maven2/
所以服用依賴性如下:
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
的Maven將使用以下URL約定(Maven2存儲庫佈局):
<Repository URL>/<groupId>/<artifactId>/<version>/<artifactId>-<version>.<packaging>
要下載兩個文件:
第一個是模塊POM,其包裝元素將顯示文件擴展名在下載第二個文件時使用(默認爲「jar」)。
最後Maven將遞歸讀取的POM列出的其他依賴相關的POM文件,並決定哪些其他模塊下載(依賴的依賴)
通過運行正常的Maven依賴關係解析過程;對於每個依賴項,它遞歸地解決傳遞依賴關係。 「服務」只是來自任何配置的Maven存儲庫的依賴關係的POM查詢。
那麼如何罐子居然在我的'〜/ .m2'露面目錄?他們是否神奇地表現自己?在某些時候,'m2e'必須通過網絡發送一個信號給Maven倉庫,聲明「hey!send me x」並下載。我在問這是什麼服務以及如何與它進行交互。 – IAmYourFaja 2012-02-24 21:52:14
@AdamTannon它通常是普通的URI,比如'http://'或'file://',請參見[Maven repositories](http://maven.apache.org/guides/introduction/introduction-to-repositories.html )。沒有什麼特別有趣的。還有一大堆Maven-like,像Gradle等,它們使用相同的解析機制,並且源代碼可用。 – 2012-02-24 22:12:01
我不確定m2e是如何具體執行的,但您可以在命令行上使用mvn dependency:tree
執行相同操作。該命令支持各種輸出格式:text,dot,graphml,tgf。見maven dependency plugin docs。
非常棒的答案 - 謝謝Mark! Maven在哪裏下載這些文件到(本地)?我知道'm2e'使用'〜/ .m2' ...但是'mvn'本身呢? – IAmYourFaja 2012-02-26 16:53:30
目錄「〜/。m2/repository「被稱爲本地存儲庫,我喜歡把它看作是先前從其他Maven存儲庫下載的文件的本地緩存,這樣可以提高效率並實現離線的Maven構建,看起來像m2e和mvn客戶端都使用相同的配置是有意義的 – 2012-02-26 18:05:52