5

在我maven-dependency-plugin用来检测未使用依赖项的 mvn 项目中,似乎没有scope我可以为 Google 的 AutoValue ( com.google.auto.value:auto-value) 指定的依赖项,这将使插件相信正在使用依赖项,尽管来自包的注释正在被使用使用(例如),如果被排除@AutoValue,项目将不会构建。auto-value

现在一种解决方案是简单地向我的插件添加一个配置条目:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <configuration>
        <usedDependencies>
            <usedDependency>com.google.auto.value:auto-value</usedDependency>
        </usedDependencies>
    </configuration>
</plugin>

但是我很想知道是否可以配置maven-dependency-plugindependency条目以auto-value检测每个注释对依赖项的使用情况?

我怀疑这是不可能的,因为RetentionPolicy我从 auto-value 使用的注释RetentionPolicy.SOURCE属于编译器并被编译器丢弃。这个对吗?

4

1 回答 1

5

不幸的是,你的怀疑是正确的。maven-dependency-plugin文档特别将此列为源级注释的关注点:http ://maven.apache.org/shared/maven-dependency-analyzer/

警告:分析不是在源代码级别而是在字节码级别进行的,因此无法检测到某些情况(常量、仅保留源代码的注释、javadoc 中的链接),如果它们是依赖项的唯一用途,则可能导致错误结果。

AutoValue您可以像在示例中那样强制used使用,也可以改用配置(这是我最近所做的)。usedDependenciesignoredUnusedDeclaredDependencies

我不相信可以配置依赖部分来避免这种情况,因为 maven 不提供仅编译的范围级别。AutoValue我用范围做标记,provided以使其远离我可能制作的任何阴影罐。

最后,您可以编写(或查找是否存在)一个将源级别注释考虑在内的自定义依赖项分析器。请参阅此处的文档http://maven.apache.org/plugins/maven-dependency-plugin/analyze-mojo.html#analyzer。可能不值得努力。

于 2016-08-01T22:21:36.230 回答