为何Maven dependency:tree的-Dexcludes参数无法始终排除指定依赖?
Maven dependency:tree 排除依赖部分失效问题
我想用dependency:tree工具快速查看模块的依赖列表,同时过滤内部、可选依赖及其传递依赖,执行的命令如下:
mvn dependency:tree -Dscope=runtime \ -Dexcludes={dependencies}
但发现部分指定排除的依赖仍出现在输出结果中,想确认操作是否有误。
以spring-ws 4.0.11版本的子模块spring-ws-core为例:
未添加排除参数时,能看到jakarta.mail-api和jaxb-runtime依赖:
mvn -o dependency:tree -Dscope=runtime \ | grep -E '(jakarta.mail-api|jaxb-runtime)' [INFO] +- org.glassfish.jaxb:jaxb-runtime:jar:4.0.5:runtime [INFO] +- jakarta.mail:jakarta.mail-api:jar:2.1.3:compile
使用groupId:artifactId格式排除jakarta.mail-api有效:
mvn -o dependency:tree -Dscope=runtime \ -Dexcludes=jakarta.mail:jakarta.mail-api \ | grep -E '(jakarta.mail-api|jaxb-runtime)' [INFO] +- org.glassfish.jaxb:jaxb-runtime:jar:4.0.5:runtime
但用同样格式排除jaxb-runtime却无效:
mvn -o dependency:tree -Dscope=runtime \ -Dexcludes=org.glassfish.jaxb:jaxb-runtime \ | grep -E '(jakarta.mail-api|jaxb-runtime)' [INFO] +- org.glassfish.jaxb:jaxb-runtime:jar:4.0.5:runtime [INFO] +- jakarta.mail:jakarta.mail-api:jar:2.1.3:compile
同时排除两者时,也仅jakarta.mail-api被过滤:
mvn -o dependency:tree -Dscope=runtime \ -Dexcludes=jakarta.mail:jakarta.mail-api,org.glassfish.jaxb:jaxb-runtime \ | grep -E '(jakarta.mail-api|jaxb-runtime)' [INFO] +- org.glassfish.jaxb:jaxb-runtime:jar:4.0.5:runtime
目前的问题是部分依赖排除有效、部分无效,找不到规律。用grep -v过滤还会残留传递依赖。
注:无论是使用默认版本(解析为2.8)还是最新的3.8.0版本执行命令:
mvn org.apache.maven.plugins:maven-dependency-plugin:3.8.0:tree ...
结果均一致。
内容的提问来源于stack exchange,提问作者Kariem
相关产品推荐
相关产品推荐

