Maven依赖性分析报告了一些“假阳性”

时间:2019-12-20 10:14:47

标签: maven

我被要求优化一个大型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>

通过执行命令mvn dependency:analyze -DignoreNonCompile=true,输出未使用的Maven依赖项的报告。我发现可以删除“未找到的已使用的已定义依赖项”部分下报告的大多数依赖项,而不会出现任何问题,但是有些依赖项的删除会导致编译错误。我想知道为什么这样的依赖关系包含在“找到的未使用的已声明依赖关系”部分中,并且是否缺少我需要的东西?

感谢您的关注。

1 个答案:

答案 0 :(得分:0)

了解此机制的工作原理很重要:

Maven使用对象WebASM框架来分析您的原始字节码。它会遍历您所有的类,然后构建这些引用的所有类的列表。

但是您可以以不同的方式使用类,通常使用反射(还有一些未编译到类文件中的东西:https://maven.apache.org/plugins/maven-dependency-plugin/faq.html#unused),并且该机制无法检测到这一点。