如何在 java class 中获取 Maven 项目的依赖项列表
How to get list of dependencies of Maven project in java class
当我们将遗留项目迁移到 Maven 时,我们面临以下问题。
我们有一个核心项目 say,xyz 和子项目 p1、p2。要将子项目添加到核心项目中,我们只需将子项目的 jar 放入核心项目中即可。现在,当这个核心项目启动时,它会尝试通过检查核心项目目录 WEB-INF/lib 中所有 jar 的 MANIFEST 文件来查找是否有任何子项目。
现在在 Maven 项目结构中,没有 lib 目录,那么我如何才能获得核心项目使用的所有 jar 的列表(及其路径)?
感谢任何帮助。
看看每个项目的pom.xml
。
这就是 Maven 的优点(其中之一),每个依赖项都列在那里,因此您无需在不同的目录项目中寻找。
现在,如果您需要找到实际下载的文件,您应该检查您的 maven home
文件夹(MAVEN_HOME 或 M2_HOME)。
Maven dependencies plugin 显示你项目的所有依赖,甚至是传递的。请尝试:
$ 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());
}
您可以使用 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");
当我们将遗留项目迁移到 Maven 时,我们面临以下问题。
我们有一个核心项目 say,xyz 和子项目 p1、p2。要将子项目添加到核心项目中,我们只需将子项目的 jar 放入核心项目中即可。现在,当这个核心项目启动时,它会尝试通过检查核心项目目录 WEB-INF/lib 中所有 jar 的 MANIFEST 文件来查找是否有任何子项目。
现在在 Maven 项目结构中,没有 lib 目录,那么我如何才能获得核心项目使用的所有 jar 的列表(及其路径)?
感谢任何帮助。
看看每个项目的pom.xml
。
这就是 Maven 的优点(其中之一),每个依赖项都列在那里,因此您无需在不同的目录项目中寻找。
现在,如果您需要找到实际下载的文件,您应该检查您的 maven home
文件夹(MAVEN_HOME 或 M2_HOME)。
Maven dependencies plugin 显示你项目的所有依赖,甚至是传递的。请尝试:
$ 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());
}
您可以使用 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");