2016-04-07 23 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"); 
相关问题