![](/img/trans.png)
[英]Process annotations with RetentionPolicy.SOURCE in a maven mojo
[英]Maven-dependency-plugin and annotations with SOURCE RetentionPolicy
在我使用maven-dependency-plugin
检测未使用的依赖关系的mvn项目中,似乎没有可以为Google的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>
但是我很想知道是否有可能以某种方式配置maven-dependency-plugin
或为auto-value
配置dependency
项,该方式可以检测每个注释的dependency
项使用情况?
我怀疑,这是不可能的,因为RetentionPolicy
我从自动值使用注释是RetentionPolicy.SOURCE
,编译器将被丢弃。 它是否正确?
不幸的是,您的怀疑是正确的。 maven-dependency-plugin
文档专门列出了此作为源级别注释的关注点: http : //maven.apache.org/shared/maven-dependency-analyzer/
警告 :分析不是在源代码上进行,而是在字节码级别上进行,因此,如果未检测到某些情况(常量,仅保留源代码的注释,javadoc中的链接),如果仅使用依赖项,则可能导致错误的结果。
您可以像在示例中那样used
AutoValue
强制与usedDependencies
used
,或改为使用ignoredUnusedDeclaredDependencies
配置(这是我最近所做的)。
我不认为可以配置依赖项节来避免这种情况,因为maven不提供仅可编译的作用域级别。 我用provided
范围标记了AutoValue
,以将其排除在我可能制作的任何有阴影的jar中。
最后,您可以编写(或查找是否存在)自定义依赖分析器,该分析器将源级别的注释考虑在内。 请参阅http://maven.apache.org/plugins/maven-dependency-plugin/analyze-mojo.html#analyzer中的文档。 可能不值得付出努力。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.