我被要求优化一个大型maven项目的依赖项,即查找并删除该项目正在使用的所有依赖项。因此我选择了插件maven-dependency-analysis:
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.1</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.shared</groupId>
<artifactId>maven-dependency-analyzer</artifactId>
<version>1.11.1</version>
</dependency>
</dependencies>
</plugin>要输出未使用的maven依赖项的报告,请执行命令mvn dependency:analyze -DignoreNonCompile=true。我发现在“未使用的声明依赖项发现”部分中报告的大多数依赖项都可以被删除,没有任何类型的问题,但是有一些依赖项的删除会导致编译错误。我想知道为什么这样的依赖项会包含在“未使用的声明依赖项找到”部分中,以及我是否遗漏了什么?
感谢您的关注。
发布于 2019-12-20 22:41:18
理解这种机制是如何工作的是很重要的:
Maven使用Object WebASM框架来分析原始字节码。它遍历所有类,然后构建这些类引用的所有类的列表。
但是您可以以不同的方式使用类,通常是使用反射(还有一些东西没有编译到类文件中:https://maven.apache.org/plugins/maven-dependency-plugin/faq.html#unused),而这种机制无法检测到这一点。
https://stackoverflow.com/questions/59423501
复制相似问题