簡體   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