2016-04-12 68 views
3

maven-dependency-plugin在編譯時通過在編譯時生成警告進行編譯時識別它認爲是未使用的依賴關係。抑制Maven依賴關係插件的「未使用的聲明的依賴關係發現」警告

[WARNING] Unused declared dependencies found: 
[WARNING] org.foo:bar-api:jar:1.7.5:compile 

在某些情況下,此消息是誤報,並且依賴性是必需的。

問題:如何識別我的pom.xml這種情況?

+0

您使用哪個IDE? – mrbela

+3

@mrbela這是獨立於IDE的。它涉及Maven,如果這是你的偏好,你可以從終端運行。 – vpiTriumph

+0

你有沒有試過用'--quiet'參數運行maven?它應該只在使用時顯示錯誤。 – dambros

回答

4

你應該在你的pom配置ignoredDependencies元素:將被忽略的依賴性

名單。任何對此列表的依賴都將被排除在「已聲明但未使用」和「已使用但未聲明」列表之外。篩選語法爲:

[groupId]:[artifactId]:[type]:[version] 

其中每個模式段都是可選的並支持完整和部分*通配符。一個空的模式段被視爲一個隱式通配符。 *

也正式由Exclude dependencies from dependency analysis指定。 一個示例配置是:

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.10</version> 
      <executions> 
       <execution> 
        <id>analyze-dep</id> 
        <goals> 
         <goal>analyze-only</goal> 
        </goals> 
        <configuration> 
         <ignoredDependencies> 
          <ignoredDependency>org.foo:bar-api:jar:1.7.5</ignoredDependency> 
         </ignoredDependencies> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 
+0

我相信這正是我所期待的。過去我曾在一個項目上做過這件事,但無法挖掘出一個例子。這在SO上非常稀少。我會嘗試一下。 – vpiTriumph

+0

答案對於抑制警告是正確的。然而,我只想指出,maven非常好,並且不會產生/ compile/scope的誤報,所以: A - 這不是傳遞依賴關係,範圍應該是/ runtime /(你會仍然需要抑制警告),或者 B - 這是一種傳遞性依賴。在這種情況下,您可以通過簡單地從您的依賴關係部分中刪除依賴項來解決警告(如果您需要特定版本,也可以將它添加到dependencyManagement中)。 – cleberz

-1

嘗試使用提供範圍

提供 這很像編譯,而是指你所期望的JDK或容器,以提供在運行時的依賴。例如,在爲Java Enterprise Edition構建Web應用程序時,您可以將Servlet API和相關Java EE API的依賴性設置爲範圍,因爲Web容器提供了這些類。此範圍僅在編譯和測試類路徑中可用,且不是傳遞性的。

0

這幾乎是我一直在尋找,但我猜你指定一個多一點,如:

<execution> 
    <goals> 
    <goal>analyze-only</goal> 
    </goals> 
    <configuration> 
    <failOnWarning>true</failOnWarning> 
    <ignoredUnusedDeclaredDependencies> 
     <ignoredUnusedDeclaredDependency>org.reflections:reflections:*</ignoredUnusedDeclaredDependency> 
    </ignoredUnusedDeclaredDependencies> 
    <ignoredUsedUndeclaredDependencies> 
     <ignoredUsedUndeclaredDependency>junit:*:*</ignoredUsedUndeclaredDependency> 
    </ignoredUsedUndeclaredDependencies> 
    <ignoreNonCompile>false</ignoreNonCompile> 
    <outputXML>true</outputXML> 
    </configuration> 
</execution> 

所以這樣做幾乎相同,但更具體的哪一種依賴關係應該被忽略