1. 程式人生 > >【Maven】依賴排除 禁止依賴傳遞 取消依賴的方法

【Maven】依賴排除 禁止依賴傳遞 取消依賴的方法

大家都知道Maven的優點是依賴管理,特別是前期使用ANT的開發者都有很多感觸。最近要開發一個java工程,要使用maven,會使用hadoop和hbase的客戶端,而引入一個hadoop-client的jar或者hbase的jar包,會依賴十幾個其他的jar包,而這些jar包的功能我又用不上,所以這種依賴反倒成了工程瘦身的負擔。關鍵我還有強迫症,見到這些對工程無用的包,我就抓狂。所以在網上百找千尋,找到了幾個方法:

1. 專案間傳遞

如果我的當前專案是project1,project1要依賴project2,project1依賴project2的配置中加上 true,表示依賴可選

<dependency
>
<groupId>com.projecct</groupId> <artifactId>project2</artifactId> <version>1.0</version> <scope>compile</scope> <optional>true</optional> </dependency>

那麼以後所有宣告依賴project1的專案如果也依賴project2,就必須寫手動宣告。比如project3依賴project1和project2,如果project3只聲明瞭對project1的依賴,那麼project2不會自動加入依賴,需要重新宣告對project2的依賴。

這種方式排除不了我專案中對第三方jar包所依賴的其他依賴,因為我不可能去修改第三方jar包的pom檔案,所以只適合在專案組內部使用。

2. 依賴過濾

(1)單依賴過濾

同依賴過濾直接處理:可以過濾一個或者多個,如果過濾多個要寫多個exclusion>。這個也解決不了我的問題,或者說解決太麻煩,我那裡知道hbase要依賴那些包,記不住。

<dependency>      
     <groupId>org.apache.hbase</groupId>  
     <artifactId>hbase</artifactId
>
<version>0.94.17</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency>

(2)多依賴過濾

把所有依賴都過濾了。手起刀落~啊,世界都安靜了。

<dependency>  
    <groupId>org.apache.hbase</groupId>  
    <artifactId>hbase</artifactId>  
    <version>0.94.17</version>  
    <exclusions>  
        <exclusion>  
            <groupId>*</groupId>  
            <artifactId>*</artifactId>  
        </exclusion>  
    </exclusions>  
</dependency>