繁体   English   中英

Maven依赖插件和带有SOURCE RetentionPolicy的注释

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM