有了前一天的依賴傳遞相關知識後,你可能會希望當使用的套件相依路徑相同時採用較低的版本讓系統比較沒有問題;又或者是希望可以排除某些依賴不要加進專案中,今天就讓我們來看看有哪些相依處理的作法
前一天我們遇到路徑相同但因聲明順序不同而造成版本變動的問題,這時我們可以透過<dependencyManagement>針對套件指定版本,這樣我們就可以避免這個問題,我們以前一日spring與beanUtil套件進行演示
我們試著修改common-logging版本為1.3.5
<dependencyManagement>
<dependencies>
<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.3.5</version>
</dependency>
</dependencies>
</dependencyManagement>
執行dependency:tree -Dverbose,就會看到版本變成我們設定的1.3.5
前面的例子我們可能會因為有套件版本比較高所以使用較新版本套件(因為Java通常向下相容),我們也可以透過<exclusions>排除低版本來完成我們的目的,當然也有可能發生依賴衝突(因為高版本的套件移除舊版本API,導致低版本套件發生Exception),下面列示如何使用
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.6</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>

先透過mvn dependency:tree -verbose確認哪些套件因為依賴原則被引用到低版本或高版本,經過團隊考量可以透過dependencyManagement指定套件版本
可以透過dependency:analyze指令分析出
src/資料夾的程式碼未引用到,但有可能是相關套件有使用到,故要刪除套件的時後務必確認。此時可以使用mvn dependency:list指令,它會把你專案所使用到的套件列示出來,查詢完就可以秒回囉!!
我們查看Spring Boot官網有寫到透過exclusions將spring-boot-starter-logging移除再引入spring-boot-starter-log4j2就可以完成,這邊很簡單的我們可以透過exclusions幫我們達成
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
本日我們說明了依賴管理的做法,並有三個好用的指令(dependency:tree、dependency:analyze、dependency:list)幫助我們事半功倍