You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何列出Maven项目所有依赖(含JDK)的Java包与类/类型?

列出Maven项目含JDK在内的所有Java包与类的实现方案

方案1:Maven官方插件+脚本导出全量包与类

适合需要导出所有类和包明细的场景:

  • 首先执行命令导出所有项目依赖到指定目录:
    mvn dependency:copy-dependencies -DoutputDirectory=./target/all-dependencies
  • 导出完整依赖坐标列表方便溯源:
    mvn dependency:list -DincludeScope=runtime -DoutputFile=./target/dependency-list.txt
  • 处理JDK内置类:
    • JDK9及以上版本:执行java --list-modules列出所有JDK模块,再用jmod describe $JAVA_HOME/jmods/xxx.jmod导出对应模块下的所有包与类
    • JDK8及以下版本:直接读取$JAVA_HOME/jre/lib/rt.jar内的类条目
  • 编写简单脚本遍历所有jar/jmod文件,提取全类名,示例Shell脚本如下:
    # 遍历所有依赖jar和JDK核心jar导出全类名到文件
    for jar in ./target/all-dependencies/*.jar $JAVA_HOME/jre/lib/rt.jar; do
      echo "=== 依赖来源: $jar ===" >> ./target/all-classes.txt
      unzip -l $jar | grep '\.class$' | awk '{print $4}' | sed 's/\.class$//' | tr / . >> ./target/all-classes.txt
    done
    
    导出后直接检索重复条目即可定位同名类冲突。

方案2:专用插件自动检测类冲突

如果核心需求是排查JDK与第三方依赖、第三方依赖之间的同名类冲突,不需要全量导出明细,可以直接使用maven-enforcer-plugin的扩展规则实现自动化检测:
在pom.xml中添加如下配置:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-enforcer-plugin</artifactId>
      <version>3.4.1</version>
      <dependencies>
        <dependency>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>extra-enforcer-rules</artifactId>
          <version>1.7.0</version>
        </dependency>
      </dependencies>
      <executions>
        <execution>
          <goals>
            <goal>enforce</goal>
          </goals>
          <configuration>
            <rules>
              <banDuplicateClasses>
                <findAllDuplicates>true</findAllDuplicates>
                <scope>runtime</scope>
                <!-- 可配置需要忽略的类规则,避免误报 -->
                <ignoredClasses>
                  <ignoredClass>com.example.test.*</ignoredClass>
                </ignoredClasses>
              </banDuplicateClasses>
            </rules>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

配置完成后执行mvn enforcer:enforce,插件会自动扫描全类路径下的所有类,直接输出冲突的全类名和对应的依赖来源,包含JDK内置类。

方案3:IDE临时排查

如果仅需要临时排查冲突,不需要集成到构建流程,IntelliJ IDEA等主流IDE可直接搜索目标全类名,通过类搜索功能查看该类存在于哪些依赖(含JDK)中,无需手动逐个遍历依赖。

内容的提问来源于stack exchange,提问作者Baradé

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 05:15:03