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

如何在java类中获取Maven项目的依赖项列表,java,maven,maven-2,Java,Maven,Maven 2,当我们将遗留项目迁移到Maven时,我们面临以下问题 我们有一个核心项目,比如xyz和子项目p1、p2。要将子项目添加到核心项目中,我们只需将子项目的jar放入核心项目中。现在,当这个核心项目启动时,它通过检查核心项目的WEB-INF/lib目录中所有JAR的清单文件来尝试查找是否有子项目 现在在Maven项目结构中,并没有lib目录,那个么我如何获得核心项目使用的所有JAR的列表(以及它们的路径) 非常感谢您的帮助。请查看每个项目的pom.xml 这就是Maven(其中之一)的优点,每个依赖项

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

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

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


非常感谢您的帮助。

请查看每个项目的
pom.xml

这就是Maven(其中之一)的优点,每个依赖项都列在那里,因此您不需要在不同的目录项目中查找


现在,如果您需要查找实际下载的文件,您应该签入
maven home
文件夹(maven_home或M2_home)

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

$ 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());
    }
您可以使用查找重叠的震击器:

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

org.jhades
杰德斯
1.0.4
新杰德斯()
.printClassLoaders()
.printClasspath()
.overlappingJarsReport()
.multipleClassVersionsReport()
.findClassByName(“org.apache.bval.jsr303.ApacheValidationProvider”)
.findClassByName(“javax.validation.spi.ValidationProvider”);

Hi@Gunther,当我对您的代码做了少许更改时,您的解决方案对我起了作用。我没有使用ClassLoader.getSystemClassLoader(),而是使用了“ClassLoader cl=getClass().getClassLoader();”Thank you.jhades.org现在指向其他内容。与答案无关。已更改链接。