maven 指定version不生效的問題
maven 指定version不生效
在項目中依賴一個 spring-security 版本時, 發(fā)現(xiàn)未生效, 調(diào)用報錯
由于項目是依賴了srpingBoot
<parent> ? ? <groupId>org.springframework.boot</groupId> ? ? <artifactId>spring-boot-starter-parent</artifactId> ? ? <version>2.3.1.RELEASE</version> ? ? <relativePath/> <!-- lookup parent from repository --> </parent>
只要加入spring-security的依賴, 哪怕指定了版本, 也會使用springBoot中的版本
找了半天, 發(fā)現(xiàn)把security的版本依賴放在maven的 dependencyManagement標(biāo)簽中即可
有關(guān)maven依賴中的version
構(gòu)件依賴解析機制
1、首先判斷依賴的范圍是否為system,如果是system,直接從本地文件系統(tǒng)解析構(gòu)件;
2、非system,需要根據(jù)依賴坐標(biāo)計算倉庫路徑,然后先從本地倉庫尋找構(gòu)件,找到構(gòu)件解析成功;
3、如果本地倉庫找不到,再判斷版本號是否為明確版本號,如果版本號明確,會從遠(yuǎn)程倉庫下載相應(yīng)版本的構(gòu)件;
4、如果版本號不明確,如 RELEASE、LATEST 和 SNAPSHOT,Maven 就需要根據(jù)遠(yuǎn)程倉庫更新策略來檢查更新
- 當(dāng)RELEASE或者LATEST時,則會基于更新策略讀取遠(yuǎn)程倉庫的maven-metadata.xml,然后將其與本地倉庫對應(yīng)的元數(shù)據(jù)合并且計算出 RELEASE或LATEST的實際值,再根據(jù)這個真實的版本號值檢查本地和遠(yuǎn)程倉庫(步驟2、3)
- 當(dāng)為SNAPSHOT時,則會基于更新策略讀取遠(yuǎn)程倉庫的maven-metadata.xml,然后將其與本地倉庫對應(yīng)元數(shù)據(jù)合并且得到最新快照版本的值,再根據(jù)這個最新的快照版本號值檢查本地和遠(yuǎn)程倉庫(步驟2、3)
通過配置或命令行參數(shù)去設(shè)置遠(yuǎn)程倉庫檢查更新的策略
always
daily
interval
never
配置方式:
<repository>? ? ? <id>xxx-snapshots</id> ? ? ? <url>https://xxx/repository/maven-xxx-snapshots/</url> ? ? ? <releases>? ? ? ? ? <enabled>true</enabled> ? ? </releases> ? ? ? <snapshots>? ? ? ? ? <enabled>true</enabled> ? ? ? ? ? <updatePolicy>always</updatePolicy>? ? ? </snapshots>? </repository>?
SNAPSHOT
最新快照版本:
即使本地倉庫已緩存,仍然會根據(jù)更新策略去遠(yuǎn)程倉庫檢查構(gòu)件是否更新,然后下載最新時間戳的構(gòu)件。
當(dāng)maven 檢測到需要依賴一個Snashot版本時,就會嘗試從所有的遠(yuǎn)程倉庫下載對應(yīng)的meta文件,并在與本地的meta文件進(jìn)行merge,得到一個與{0.1.0-SNAPSHOT}并帶有時間戳的最新的版本號{0.1.0-20210910.091638-3},然后再嘗試下載該版本。
<dependency> ? ? ?<groupId>com.etoak</groupId> ? ? ?<artifactId>test</artifactId> ? ? ?<version>SNAPSHOT</version> ?</dependency>
RELEASE
最新發(fā)布版本:
如果本地倉庫沒有緩存,會去遠(yuǎn)程倉庫獲取;如果本地倉庫已緩存,即使遠(yuǎn)程倉庫同一版本號有更新,也不再去遠(yuǎn)程倉庫獲取。
<dependency> ? ? ?<groupId>com.etoak</groupId> ? ? ?<artifactId>test</artifactId> ? ? ?<version>RELEASE</version> ?</dependency>
LATEST
最新版本:
下載最新的SNAPSHOT或者最新的RELEASE,不推薦使用。
<dependency> ? ? ?<groupId>com.etoak</groupId> ? ? ?<artifactId>test</artifactId> ? ? ?<version>LATEST</version> ?</dependency>
指定依賴的版本范圍:
<dependency> ? ? ?<groupId>com.etoak</groupId> ? ? ?<artifactId>test</artifactId> ? ? ?<version>[1.0.1,)</version> ?</dependency>
范圍說明:
Range | Meaning |
---|---|
1.0 | x >= 1.0 * The default Maven meaning for 1.0 is everything (,) but with 1.0 recommended. Obviously this doesn't work for enforcing versions here, so it has been redefined as a minimum version. |
(,1.0] | x <= 1.0 |
(,1.0) | x < 1.0 |
[1.0] | x == 1.0 |
[1.0,) | x >= 1.0 |
(1.0,) | x > 1.0 |
(1.0,2.0) | 1.0 < x < 2.0 |
[1.0,2.0] | 1.0 <= x <= 2.0 |
(,1.0],[1.2,) | x <= 1.0 or x >= 1.2. Multiple sets are comma-separated |
(,1.1),(1.1,) | x != 1.1 |
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Springboot?接口需要接收參數(shù)類型是數(shù)組問題
這篇文章主要介紹了Springboot?接口需要接收參數(shù)類型是數(shù)組問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01SpringBoot多環(huán)境配置及配置文件分類實例詳解
這篇文章主要介紹了SpringBoot多環(huán)境配置及配置文件分類,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-10-10基于application和bootstrap的加載順序及區(qū)別說明
這篇文章主要介紹了application和bootstrap的加載順序及區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07spring cloud gateway集成hystrix實戰(zhàn)篇
這篇文章主要介紹了spring cloud gateway集成hystrix實戰(zhàn),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07