如何列出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内的类条目
- JDK9及以上版本:执行
- 编写简单脚本遍历所有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é
相关产品推荐
相关产品推荐

