MAVEN项目版本号约定(根据运行环境选择不同依赖版本)
目的
在目前的微服务项目开发中,由于基础服务所提供依赖的版本不规范,在上线时踩过不少坑,为了解决这个问题,并且实现多环境构建时,根据不同环境切换不同版本的内部依赖,所以进行整理输出,意图规范项目的版本号管理,简化版本变动的操作,降低人工操作带来的风险。
说明
需要推送到私服被其他服务依赖的jar包,才需要进行版本变动,其他项目模块包括项目父pom,都是固定版本,暂定:0.0.1-SNAPSHOT,不进行版本变动。
同项目的模块依赖,在每次构建时会一起构建,也不需要进行版本变动。
约定
- 推送到私服的jar包,需要保持精简,减少其他的内部依赖,原则上只包含服务接口声明和返回的数据模型类;
- 开发环境使用0.0.1-SNAPSHOT,测试环境使用 1.0.0-SNAPSHOT,生产环境使用正式版本:X.Y.Z.RELEASE;
- 开发环境可根据开发需要自行Deploy,测试和生产由专人Deploy,在提测后或发版前,进行推送。
项目配置
提供依赖的项目 B:
修改B 项目根目录的pom.xml,在中增加三个配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| <profiles> <profile> <id>Dev</id> <properties> <test.api.version>0.0.1-SNAPSHOT</test.live.api.version> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile>
<profile> <id>Test</id> <properties> <test.api.version>1.0.0-SNAPSHOT</test.api.version> </properties> </profile>
<profile> <id>Deploy</id> <properties> <test.api.version>1.1.1.RELEASE</test.api.version> </properties> </profile>
</profiles>
|
修改B 项目api 模块的版本:
1 2 3 4
| <artifactId>test-api</artifactId> <version>${test.api.version}</version> <name>test-api</name> <description>测试服务对外依赖</description>
|
使用依赖的项目 A:
修改A 项目根目录的pom.xml,在中增加三个配置,同时在 中增加对应的依赖,版本号为 profile.properties 中定义的版本号,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| <profiles> <profile> <id>Dev</id> <properties> <test.api.version>0.0.1-SNAPSHOT</test.api.version> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile>
<profile> <id>Test</id> <properties> <test.api.version>1.0.0-SNAPSHOT</test.api.version> </properties> </profile>
<profile> <id>Deploy</id> <properties> <test.api.version>1.1.1.RELEASE</test.api.version> </properties> </profile> </profiles>
<dependencyManagement> <dependencies> <dependency> <groupId>com.demo</groupId> <artifactId>test-api</artifactId> <version>${test.api.version}</version> </dependency> </dependencies> </dependencyManagement>
|
A 项目的具体引用到B 项目jar 包依赖的模块,无需指定版本,直接使用即可,如:
1 2 3 4 5 6 7
| <dependencies> <dependency> <groupId>com.demo</groupId> <artifactId>test-api</artifactId> </dependency> </dependencies>
|
操作
B项目推送依赖
• 开发环境:在项目根目录执行 mvn Deploy 或 mvn Deploy -PDev
• 测试环境:在项目根目录执行 mvn Deploy -PTest
• 生产环境:在开发分支时,即可修改模块 xx-live 的pom.xml 中的 Deploy 的 profile 节点,修改属性 xxx.api.version 版本为 最新版本,然后提交代码,合并代码到prod分支后,再切换到prod分支,接着在根目录执行:mvn Deploy -PDeploy
A项目使用依赖
• 在开发分支时,修改项目父pom.xml 中的 Deploy 的 profile 节点,修改属性 xxx.api.version 版本版本为 最新版本
• 构建时,同样需要使用参数-PTest,-PDeploy