使用SOURCE RetentionPolicy的Maven-dependency-plugin和注释

时间:2016-01-13 15:40:28

标签: java maven maven-dependency-plugin auto-value

在我正在利用maven-dependency-plugin来检测未使用的依赖项的mvn项目中,我似乎没有为Google的AutoValue(scope)指定的依赖com.google.auto.value:auto-value尽管使用了包中的注释(例如@AutoValue)并且如果auto-value被排除在外,项目也不会构建,将会说服该插件已使用依赖项。< / p>

现在一个解决方案就是在我的插件中添加一个配置条目:

<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-plugin配置dependencyauto-value条目根据其注释?

我怀疑这是不可能的,因为我在自动值中使用的注释的RetentionPolicyRetentionPolicy.SOURCE并且被编译器丢弃。这是对的吗?

1 个答案:

答案 0 :(得分:5)

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

  

警告:分析不是在源处进行的,而是字节码级别,然后在某些情况下未检测到(常量,带有源保留的注释,javadoc中的链接),如果它们可能导致错误的结果是依赖的唯一用途。

您可以使用AutoValue强制used作为usedDependencies,或者使用ignoredUnusedDeclaredDependencies配置(这是我最近所做的)。

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

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