vpi*_*mph 5 java maven maven-dependency-plugin auto-value
在我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>
Run Code Online (Sandbox Code Playgroud)
但我很想知道是否可以以检测每个注释使用依赖关系的方式配置条目maven-dependency-plugin或dependency条目auto-value?
我怀疑这是不可能的,因为RetentionPolicy我从自动值中使用的注释RetentionPolicy.SOURCE是由编译器丢弃的并且被编译器丢弃.它是否正确?
不幸的是,你的怀疑是正确的.该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.可能不值得努力.