如何在java类中获取Maven项目的依赖项列表

时间:2016-04-07 06:52:18

标签: java maven maven-2

在我们将遗留项目迁移到Maven时,我们面临以下问题。

我们有一个核心项目说,xyz和子项目p1,p2。要将子项目添加到核心项目中,我们只需将子项目的jar放入核心项目中。现在当这个核心项目启动时,它会通过检查核心项目目录WEB-INF / lib中所有jar的MANIFEST文件来查找是否有任何子项目。

现在在Maven项目结构中,没有lib目录,那么我如何获得核心项目所使用的所有jar的列表(带有它们的路径)?

感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

查看每个项目的pom.xml

Maven(其中一个)的美丽,每个依赖都列在那里,所以你不需要在不同的目录项目中打猎。

现在,如果您需要查找下载的实际文件,则应该检入maven home文件夹(MAVEN_HOME或M2_HOME)。

答案 1 :(得分:1)

Maven依赖项插件显示项目的所有依赖项,甚至是传递项。请尝试:

$ mvn dependency:tree

如果你需要在运行时找出依赖关系,那么应该可以检查类路径(当你的项目由Maven exec启动时,Maven会为你设置)。对于没有自定义类加载器的Java SE应用程序,以下应该可以工作:

    ClassLoader cl = ClassLoader.getSystemClassLoader();

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

答案 2 :(得分:0)

您可以使用jHades查找重叠的jar:

<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");