![](/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.