2016-04-07 22 views
1

當我們將我們的遺留項目遷移到Maven時,我們正面臨以下問題。如何獲得Java類中Maven項目的依賴關係列表

我們有一個核心項目,xyz和子項目p1,p2。要將子項目添加到核心項目中,我們只需將子項目的jar添加到核心項目中。現在,當這個核心項目開始時,它通過檢查覈心項目目錄WEB-INF/lib中的所有jar的MANIFEST文件來嘗試查找是否有任何子項目。

現在在Maven項目結構中,沒有lib目錄,那麼我可以如何獲得核心項目(使用它們的路徑)使用的所有jar的列表?

任何幫助表示讚賞。

回答

0

Maven依賴關係插件顯示您的項目的所有依賴關係,甚至是可傳遞的依賴關係。請嘗試:

$ mvn dependency:tree 

如果你需要弄清楚在運行時依賴,它應該是能夠檢查類路徑(這Maven的爲您設置,當你的項目是Maven的高管開始)。對於沒有自定義類加載Java SE應用程序下面應該工作:

ClassLoader cl = ClassLoader.getSystemClassLoader(); 

    URL[] urls = ((URLClassLoader) cl).getURLs(); 
    for (URL url : urls) { 
     System.out.println(url.getFile()); 
    } 
+0

嗨@Gunther,您的解決方案爲我工作時,我幾乎不改變你的代碼。代替ClassLoader.getSystemClassLoader(),我使用了「ClassLoader cl = getClass()。getClassLoader();」 謝謝。 –

1

看看每個項目的pom.xml

這就是Maven(其中之一)的美妙之處,每一個依賴項都列在那裏,所以你不需要去尋找不同的目錄項目。

現在,如果你需要找到下載的實際文件,你應該檢查你的maven home文件夾(MAVEN_HOME或M2_HOME)。

0

您可以使用jHades找到重疊的罐子:http://jhades.org/

<dependency> 
    <groupId>org.jhades</groupId> 
    <artifactId>jhades</artifactId> 
    <version>1.0.4</version> 
</dependency> 

new JHades() 
.printClassLoaders() 
.printClasspath() 
.overlappingJarsReport() 
.multipleClassVersionsReport() 
.findClassByName("org.apache.bval.jsr303.ApacheValidationProvider") 
.findClassByName("javax.validation.spi.ValidationProvider"); 
相關問題