maven父子模組jar包管理和spring boot
阿新 • • 發佈:2019-01-10
注:
如果父pom中使用的是
<dependencies>....</dependencies>
的方式,則子pom會自動使用pom中的jar包,
如果父pom使用
<dependencyManagement>
<dependencies>....</dependencies>
</dependencyManagement>
方式,則子pom不會自動使用父pom中的jar包,這時如果子pom想使用的話,就要給出groupId和artifactId,無需給出version
專案結構:
parent--父模組空maven專案, 用於管理子模組 controller service dao model client--被其他專案依賴進行微服務內部呼叫(因下面問題導致client在其他專案中版本衝突和引入大量無用的jar包)
存在問題:
- 父模組繼承spring boot和引入大量jar包, 當專案1引入專案2中的client模組時導致專案2中父模組中很多無用的jar包也引入到專案1中
- 開始計劃是父模組放公用的包和管理子模組的版本, 最後每個人的習慣不一樣導致不同專案之間的版本衝突
- spring boot繼承在maven父子模組中很容易版本衝突
解決方法:
- 哪個模組用到什麼引入什麼, 保持子模組獨立
- 父模組只放標籤管理版本, 不引入任何jar包
- 父模組不繼承spring boot, 由controller層匯入spring boot
由父模組繼承spring boot改為子模組匯入spring boot
<!-- 父模組不要這樣使用繼承 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.13.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent>
<!-- 使用dependencyManagement匯入版本號 --> <dependencyManagement> <dependencies> <!-- 自定義版本覆蓋spring boot內的版本; 比如驗證框架6.0.10.Final覆蓋spring boot parent內的5.3.6.Final; 專案會優先獲取spring boot內版本, 覆蓋可以避免版本衝突 注意: 覆蓋版本一定要在spring-boot-dependencies上面 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.10.Final</version> </dependency> <!-- 匯入spring boot的pom --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>1.5.13.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> ..... <!-- 使用匯入, 一定要使用spring-boot-maven外掛, 否則無法使用java -jar 命令 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>1.5.13.RELEASE</version> <configuration> <mainClass>${start-class}</mainClass> <layout>ZIP</layout> <!--<skip>true</skip>--> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin>