在我正在利用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
配置dependency
或auto-value
条目根据其注释?
我怀疑这是不可能的,因为我在自动值中使用的注释的RetentionPolicy
是RetentionPolicy.SOURCE
并且被编译器丢弃。这是对的吗?
答案 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。可能不值得努力。