【问题标题】:How to get list of dependencies of Maven project in java class如何在java类中获取Maven项目的依赖项列表
【发布时间】:2016-04-07 06:52:17
【问题描述】:

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

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

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

感谢任何帮助。

【问题讨论】:

    标签: java maven maven-2


    【解决方案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());
        }
    

    【讨论】:

    • 您好@Gunther,当我对您的代码进行少量更改时,您的解决方案对我有用。而不是 ClassLoader.getSystemClassLoader(),我使用“ClassLoader cl = getClass().getClassLoader();”谢谢。
    【解决方案2】:

    看看每个项目的pom.xml

    这就是 Maven(其中之一)的美妙之处,每个依赖项都列在那里,因此您无需在不同的目录项目中寻找。

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • jhades.org 现在指向别的东西。与答案无关。
      • 更改了链接。
      猜你喜欢
      • 2010-09-17
      • 2012-03-30
      • 2011-09-01
      • 2018-12-06
      • 2011-11-04
      • 2016-03-03
      • 2018-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多