Open superleeyom opened 3 years ago
假设有两个小组负责维护两个组件,example-service 和 example-ui,这两个组件不在同一个代码仓库,example-service 的版本号信息:
example-service
example-ui
<artifactId>example-service</artifactId> <version>1.0</version> <packaging>jar</packaging>
其中 example-ui 项目依赖于 example-service:
<dependency> <groupId>com.xxx.yyy</groupId> <artifactId>example-service</artifactId> <version>1.0</version> </dependency>
而这两个项目每天都会构建多次,我们知道,maven 的依赖管理是基于版本管理的,对于发布状态的 artifact,如果版本号相同,即使我们内部的镜像服务器上的组件比本地新,maven 也不会主动下载的。 假如 example-service 增加了一些新的功能,这时候就得升级 example-service 的版本号,然后 deploy 到 maven 私服上去,由于升级了 example-service 的版本号为 1.1,example-ui 由于是依赖方,开发阶段,它想要使用example-service的新功能,则要跟着把 example-service 的版本号到 1.1,如果example-service更新的很频繁,每次构建你都要升级 example-service 的版本,效率就非常低。
那引入 SNAPSHOT 和 RELEASE 版本控制,这两种版本是分别在不同的 maven 仓库,前者是快照版本,用于开发环境,后者是稳定正式版本,用于生产环境,那在开发阶段,我们需要将 example-service 的版本号改为:
SNAPSHOT
RELEASE
<artifactId>example-service</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging>
在该模块的版本号后加上 -SNAPSHOT即可(注意这里必须是大写),然后 deploy 到私服,在 maven-snapshots 仓库下,version 列根据发布时间不同自动在 1.0 后面加上了当前时间,以此区别不同的快照版本:
-SNAPSHOT
maven-snapshots
version
example-ui 项目里,引入 example-service 快照版本:
<dependency> <groupId>com.xxx.yyy</groupId> <artifactId>example-service</artifactId> <version>1.0-SNAPSHOT</version> </dependency>
这样的话,每次 example-ui 构建时,会优先去远程仓库中查看是否有最新的 example-service-1.0-SNAPSHOT.jar,不需要频繁的去修改example-service 的版本号。等到两个组件要正式上线,example-service 的版本号改为:
example-service-1.0-SNAPSHOT.jar
<artifactId>example-service</artifactId> <version>1.1-RELEASE</version> <packaging>jar</packaging>
然后 deploy 到私服,example-ui 项目里,引入 example-service 正式升级版本:
<dependency> <groupId>com.xxx.yyy</groupId> <artifactId>example-service</artifactId> <version>1.1-RELEASE</version> </dependency>
所以总的来说,对于 Maven 版本号,我们最好这样约定:
Maven中的SNAPSHOT版本
假设有两个小组负责维护两个组件,
example-service
和example-ui
,这两个组件不在同一个代码仓库,example-service
的版本号信息:其中
example-ui
项目依赖于example-service
:而这两个项目每天都会构建多次,我们知道,maven 的依赖管理是基于版本管理的,对于发布状态的 artifact,如果版本号相同,即使我们内部的镜像服务器上的组件比本地新,maven 也不会主动下载的。 假如
example-service
增加了一些新的功能,这时候就得升级example-service
的版本号,然后 deploy 到 maven 私服上去,由于升级了example-service
的版本号为 1.1,example-ui 由于是依赖方,开发阶段,它想要使用example-service
的新功能,则要跟着把example-service
的版本号到 1.1,如果example-service
更新的很频繁,每次构建你都要升级example-service
的版本,效率就非常低。那引入
SNAPSHOT
和RELEASE
版本控制,这两种版本是分别在不同的 maven 仓库,前者是快照版本,用于开发环境,后者是稳定正式版本,用于生产环境,那在开发阶段,我们需要将example-service
的版本号改为:在该模块的版本号后加上
-SNAPSHOT
即可(注意这里必须是大写),然后 deploy 到私服,在maven-snapshots
仓库下,version
列根据发布时间不同自动在 1.0 后面加上了当前时间,以此区别不同的快照版本:example-ui
项目里,引入example-service
快照版本:这样的话,每次
example-ui
构建时,会优先去远程仓库中查看是否有最新的example-service-1.0-SNAPSHOT.jar
,不需要频繁的去修改example-service
的版本号。等到两个组件要正式上线,example-service
的版本号改为:然后 deploy 到私服,
example-ui
项目里,引入example-service
正式升级版本:所以总的来说,对于 Maven 版本号,我们最好这样约定:
参考资料