2016-01-13 104 views
4

在我利用maven-dependency-plugin檢測未使用的依賴一個MVN項目,有貌似沒有依賴性scope我可以爲谷歌的AutoValue(com.google.auto.value:auto-value),以將說服插件的儘管正在使用來自包的註釋(例如@AutoValue),並且如果排除auto-value,則不會構建項目。Maven的依賴,插件和帶有源的RetentionPolicy註釋

現在一個解決方案是簡單地增加一個配置項,以我的插件:

<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或的方式,將在dependency條目auto-value檢測每個註釋的依賴項的使用情況?

我的懷疑是,這是不可能的,因爲我使用自動值的註釋RetentionPolicyRetentionPolicy.SOURCE,並且被編譯器丟棄。它是否正確?

回答

4

不幸的是,您的懷疑是正確的。該maven-dependency-plugin文檔在這裏具體列出這是一個關心源級別的註解:http://maven.apache.org/shared/maven-dependency-analyzer/

警告:分析是不是在源,但字節碼層面進行,然後沒有檢測到某些情況下(常量,註釋與源只保留,javadoc中的鏈接),如果它們是依賴項的唯一使用,則可能導致錯誤的結果。

您可以強制AutoValueusedusedDependencies,你在你的例子或使用ignoredUnusedDeclaredDependencies配置,而不是(這是我最近所做的)。

我不認爲有可能配置依賴節以避免這種情況,因爲maven不提供僅編譯的範圍級別。我用provided範圍標記AutoValue,以使其遠離我可能製作的任何着色的罐子。

最後,您可以編寫(或查找是否存在)自定義依賴關係分析器,並將源級別註釋考慮在內。請參閱文檔http://maven.apache.org/plugins/maven-dependency-plugin/analyze-mojo.html#analyzer。可能不值得的努力。