生活随笔
收集整理的這篇文章主要介紹了
maven传递依赖
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- 1. 依賴傳遞
- 2. 什么是依賴沖突
- 3. 怎么解決
- 4. 項目聚合
maven是一個項目管理的工具,從項目的構建到項目開發,再到項目的測試,項目上線,都可一鍵管理。
1. 那么,還有maven是如何管理項目中所用到的jar版本沖突,在傳遞依賴時,怎么解決?
2. 如何創建父子依賴的項目?
1. 依賴傳遞
在maven中,依賴是可以傳遞的,假設存在三個項目,分別是項目A,項目B以及項目C。
假設C依賴B,B依賴A,那么我們可以根據maven項目依賴的特征不難推出項目C也依賴A。
2. 什么是依賴沖突
由于依賴傳遞現象的存在,特定情況下會造成依賴沖突。
spring-context 依賴了spring-beans
3. 怎么解決
1. 使用maven提供的依賴調解原則 第一聲明者優先原則在 pom 文件中定義依賴,以先聲明的依賴為準。其實就是根據坐標導入的順序來確定最終使用哪個傳遞過來的依賴路徑近者優先原則在 pom 文件定義依賴,以路徑近者為準。
2. 排除依賴使用exclusions標簽將傳遞過來的依賴排除出去
<dependency><groupId>org.springframework.boot
</groupId><artifactId>spring-boot-starter-test
</artifactId><scope>test
</scope><exclusions><exclusion><groupId>org.junit.vintage
</groupId><artifactId>junit-vintage-engine
</artifactId></exclusion></exclusions></dependency>
3. 鎖定版本采用直接鎖定版本的方法確定依賴jar包的版本,版本鎖定后則不考慮依賴的聲明順序或依賴的路徑,以鎖定的版本為準添加到工程中,此方法在企業開發中經常使用版本鎖定的使用方式:第一步:在dependencyManagement標簽中鎖定依賴的版本第二步:在dependencies標簽中聲明需要導入的maven坐標pom文件中使用dependencyManagement標簽進行依賴jar的版本鎖定,并不會真正將jar包導入到項目中,只是對這些jar的版本進行鎖定。項目中使用哪些jar包,還需要在dependencies標簽中進行聲明dependencies標簽需要導入依賴時只需要指定groupId和artifactId,無須再指定version
即創建父子項目,springboot就是典型的父子依賴的項目。
4. 項目聚合
項目聚合父項目子項目
1子項目
2...
父項目,鎖定版本
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0
</modelVersion><groupId>cn.bitqian
</groupId><artifactId>parent
</artifactId><version>0.0.1-SNAPSHOT
</version><packaging>pom
</packaging><name>parent
</name><url>http://maven.apache.org
</url><properties><project.build.sourceEncoding>UTF-8
</project.build.sourceEncoding><spring-version>5.0.10.RELEASE
</spring-version><mybatis-version>2.1.3
</mybatis-version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework
</groupId><artifactId>spring-context
</artifactId><version>${spring-version}
</version></dependency><dependency><groupId>org.mybatis.spring.boot
</groupId><artifactId>mybatis-spring-boot-starter
</artifactId><version>${mybatis-version}
</version></dependency></dependencies></dependencyManagement><modules><module>child01
</module><module>child02
</module></modules>
</project>
有一個坑,父項目打包的方式必須是pom, 而且,eclipse創建完成后會包莫名其妙的錯誤… 解決如下。
child01,骨架是quick start
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><modelVersion>4.0.0
</modelVersion><parent><groupId>cn.bitqian
</groupId><artifactId>parent
</artifactId><version>0.0.1-SNAPSHOT
</version></parent><groupId>cn.bitqian.child01
</groupId><artifactId>child01
</artifactId><version>0.0.0.1-SNAPSHOT
</version><name>child01
</name><url>http://maven.apache.org
</url><properties><project.build.sourceEncoding>UTF-8
</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.springframework
</groupId><artifactId>spring-context
</artifactId></dependency> <dependency><groupId>junit
</groupId><artifactId>junit
</artifactId><version>3.8.1
</version><scope>test
</scope></dependency></dependencies>
</project>
child02 就不演示了,根模塊01一樣,只不過是選的webapp作為骨架。
總結
以上是生活随笔為你收集整理的maven传递依赖的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。