2012-10-09 80 views
15

有沒有辦法一個Maven插件可以列出不需要的/黑名單的依賴關係(直接和傳遞),如果檢測到列出的依賴關係之一,則構建失敗?黑名單Maven依賴關係

在我的項目中,我們嚴格地希望擺脫Apache Commons Logging並將其替換爲SLF4J JCL Bridge。我意識到我們必須排除不需要的deps自己,但如果有人添加了依賴項,導致列入黑名單依賴項,我希望構建失敗。

回答

17

您可以使用maven-enforcer-plugin禁止一些依賴關係。

下面是他們的示例,其中包含更新以排除Apache Commons Logging。

<project> 
    [...] 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-enforcer-plugin</artifactId> 
     <version>1.1.1</version> 
     <executions> 
      <execution> 
      <id>enforce-banned-dependencies</id> 
      <goals> 
       <goal>enforce</goal> 
      </goals> 
      <configuration> 
       <rules> 
       <bannedDependencies> 
        <excludes> 
        <exclude>commons-logging:commons-logging</exclude> 
        </excludes> 
       </bannedDependencies> 
       </rules> 
       <fail>true</fail> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    [...] 
</project> 

時運行mvn install將輸出:

[WARNING] Rule 1: org.apache.maven.plugins.enforcer.BannedDependencies failed with message: 
Found Banned Dependency: commons-logging:commons-logging:jar:1.1.1 
Use 'mvn dependency:tree' to locate the source of the banned dependencies. 

這一切都與一個BUILD FAILURE結束。

2

是的,enforcer plugin支持這與bannedDependencies規則。

+0

另一個我最喜歡的是codehaus extra enforcer規則庫中的[banDuplicateClasses](http://mojo.codehaus.org/extra-enforcer-rules/banDuplicateClasses.html)規則。這將檢測由'commons-logging'和'jcl-over-slf4j'上的依賴引入的重複類。 – Ramon