在一个mvn项目中,我使用maven-dependency-plugin来检测未使用的依赖项,似乎没有我可以为谷歌的AutoValue (com.google.auto.value:auto-value)指定的依赖项scope,它可以使插件相信依赖项正在使用,尽管来自包的注释正在使用(例如@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>但我很想知道,是否有可能为auto-value配置maven-dependency-plugin或dependency条目,以便根据其注释检测依赖项的使用情况?
我怀疑这是不可能的,因为我在auto- RetentionPolicy中使用的注解的值是RetentionPolicy.SOURCE的,并且被编译器丢弃了。这是正确的吗?
发布于 2016-08-02 06:21:36
不幸的是,你的怀疑是正确的。对于源代码级别的批注,maven-dependency-plugin文档特别列出了这一点:http://maven.apache.org/shared/maven-dependency-analyzer/
Warning:分析不是在源代码而是字节码级别进行的,因此某些情况(常量、仅保留源代码的注释、javadoc中的链接)未被检测到,如果它们是依赖项的唯一使用,可能会导致错误的结果。
您可以使用usedDependencies强制AutoValue作为used,就像您在示例中所做的那样,或者改为使用ignoredUnusedDeclaredDependencies配置(这就是我最近所做的)。
我不相信通过配置依赖部分来避免这种情况是可能的,因为maven没有提供仅编译的范围级别。我用provided作用域标记AutoValue,以使它不会出现在我可能生成的任何阴影jars之外。
最后,您可以编写(或查找是否存在)一个自定义依赖关系分析器,该分析器将源代码级别的注释考虑在内。请参阅此处的文档http://maven.apache.org/plugins/maven-dependency-plugin/analyze-mojo.html#analyzer。可能不值得你费这个力气。
https://stackoverflow.com/questions/34770843
复制相似问题