1.目前問題
目前由于都是用的snapshot快照版本,并且有些版本沒設置版本號,導致加大了引起生產事故的風險,同時也會讓maven構建變慢狸驳,所以我們需要對現在jar的版本進行規(guī)范化
2.我們內部的版本升級建議
我們將所有的二方庫的包都使用父類的版本來管理预明,為了方便,都統(tǒng)一用父類的版本號耙箍。
例如:
父類:
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xxxxx.frame</groupId>
<artifactId>frame</artifactId>
<version>1.1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>frame</name>
kafka框架:
不設置版本號撰糠,用父類的版本號
<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">
<parent>
<groupId>com.xxxxx.frame</groupId>
<artifactId>frame</artifactId>
<version>1.1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>frame-kafka</artifactId>
<packaging>jar</packaging>
所以frame
下面的所有air-xxx-client
,frame-async-download
等子模塊的版本都是1.1.0-SNAPSHOT
辩昆。
優(yōu)化
當前為了方便好管理阅酪,都是將所有的子jar版本都統(tǒng)一成一個版本號,在父pom里管理汁针。
之所以都公用一個父版本號是前期為了方便管理术辐,也方便修改。
1.開發(fā)階段
例如frame-kafka
的這個包目前的版本是1.1.0
,這個是已經發(fā)布的正式的jar包施无。同時父類的frame:com.xxxx.frame
的版本也肯定是1.1.0
這個時候有了一個新的需求需要對frame-kafka
修改辉词,那我們就拉了一個新的分支,然后將父類frame:xxxx.frame
這個的版本號改成1.1.1-SNAPSHOT
猾骡。
此時父類的POM:
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xxxxx.frame</groupId>
<artifactId>frame</artifactId>
<version>1.1.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>frame</name>
frame-kafka-xxxxx
的POM:
<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">
<parent>
<groupId>com.xxxxx.frame</groupId>
<artifactId>frame</artifactId>
<version>1.1.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>frame-kafka</artifactId>
<packaging>jar</packaging>
這里就是將我們的父類由1.1.0
改成1.1.1-SNAPSHOT
瑞躺。
同時我們也需要將其他在frame下面的項目的<parent>
都改成1.1.1-SNAPSHOT
那在我們開發(fā)階段,我們都是使用當前版本的快照版本兴想,例如:
<dependency>
<groupId>com.xxxxxx.frame</groupId>
<artifactId>frame-kafka</artifactId>
<version>1.1.1-SNAPSHOT</version>
</dependency>
升級原則:當前生產的版本升級一版本并且改成SNAPSHOT
2.提測階段
這個時候幢哨,我們仍然是用SNAPSHOT
版本,因為如果在提測過程中我們就改成正式版本的話嫂便,一旦有bug需要修改捞镰,那這樣版本號就會升級的的很快。
3.測試通過毙替,準備上線階段
這個時候岸售,基本上沒什么需要修改了,代碼是不會再改動了厂画。那就可以把SNAPSHOT
去掉冰评,重新打包,同時依賴方也需要去掉SNAPSHOT
木羹,重新打包。
這個階段就不允許有除修改版本號的外的代碼提交了解孙。
如果去掉了SNAPSHOT
坑填,并且已經構建二方庫了,但是仍然有bug弛姜,那就得回到提測階段脐瑰,同時這個版本號得再次升級成下一個版本的SNAPSHOT
。
例如:我們從1.0.0
改成了1.1.0-SNAPSHOT
,開發(fā)完成了廷臼,然后準備上線苍在,同時把1.1.0-SNAPSHOT
改成了1.1.0
正式版本绝页。這個時候構建好了,也放在測試環(huán)境了寂恬,就等發(fā)版本了续誉。但是發(fā)現有個代碼上的bug,那這個時候就需要將1.1.0
改成1.1.1-SNAPSHOT
初肉,同時依賴的地方也需要修改酷鸦。等真正測試完沒問題了,再改成1.1.1
,然后上線牙咏。
例子
frame-kafka
當前master分支為1.1.0
父類pom也為1.1.0
開發(fā)階段:1.1.0
-> 1.1.1-SNAPSHOT
提測階段:仍然 1.1.1-SNAPSHOT
上線階段: 1.1.1-SNAPSHOT
-> 1.1.1
其他
1.對于三方庫如果提供的是SNAPSHOT版本臼隔,我們就得讓對方提供正式版本,如果沒有的話妄壶,我們就沒辦法修改了摔握。
2.對于版本升級頻繁的jar,我們的小版本可以設置大點比如1.1.0
可以一直升級到1.1.8
再到1.1.50
丁寄,這樣一直改下去氨淌。
工具使用
由于每次升級都需要改版本,可以使用maven專門的修改版本的插件
點versions:set狡逢,然后這里輸入版本即可
這樣就會把所有依賴父模塊的版本都改了