現象:當一個應用有多個模塊時,導致項目無法啓動。
原因:同一個依賴在不同的模塊有不同的版本,出現衝突,導致報NoClassFound。
解決方案:通過在根模塊時dependencyManagement標籤來管理版本,子模塊依賴相同的版本時不需要制定vesion.
dependencyManagement的原理:
只聲明依賴,不實現引入。如果dependencies裏面的dependency裏面沒有制定對應的vesion,Maven會沿着父子層次向上走,直到找到一個擁有dependencyManagement 元素的項目,然後它就會使用這個dependencyManagement元素中指定的版本號。如果本模塊已經有了version,不會用dependencyManagement 裏面的vesion。這個類似java裏面的繼承關係。
按照在開發的場景中,可能會遇到下面的問題
1、在maven中,一個模塊只能有一個parent,某個模塊可能需要有多parent怎麼處理呢,公司可能有自己的parent怎麼辦?
maven提出的解決方案:使用type標籤和scope標籤來解決。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.5.6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>