多模块Maven项目中公共模块如何获取应用版本
实现方案
要让公共模块C的/deployedVersion接口返回所在应用(A或B)的版本,核心思路是让应用A、B各自提供版本信息,公共模块依赖这个信息返回结果,具体步骤如下:
1. 在公共模块C中定义版本获取抽象层与接口
首先在C里搭建基础的抽象逻辑和REST接口:
定义版本提供接口
// 模块C中 public interface VersionProvider { String getDeployedVersion(); }
创建REST接口
// 模块C中 @RestController public class VersionController { private final VersionProvider versionProvider; // 构造注入,由应用A/B提供具体实现类 public VersionController(VersionProvider versionProvider) { this.versionProvider = versionProvider; } @GetMapping("/deployedVersion") public String getDeployedVersion() { return versionProvider.getDeployedVersion(); } }
2. 在应用A、B中实现版本提供器并注入自身版本
每个应用需要把自身pom.xml里的版本号传递给公共模块,这里用Maven资源过滤+Spring属性注入的方式实现:
步骤1:配置Maven资源过滤
在应用A的pom.xml中开启资源过滤,让Maven自动替换${project.version}为实际版本号:
<!-- 应用A的pom.xml --> <build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build>
步骤2:创建版本属性文件
在应用A的src/main/resources下新建version.properties:
app.version=${project.version}
步骤3:实现VersionProvider接口
在应用A中实现公共模块的VersionProvider,读取属性文件中的版本号:
// 应用A中 @Component public class AppAVersionProvider implements VersionProvider { private final String appVersion; public AppAVersionProvider(@Value("${app.version}") String appVersion) { this.appVersion = appVersion; } @Override public String getDeployedVersion() { return appVersion; } }
应用B重复上述操作:配置pom资源过滤、创建version.properties、实现AppBVersionProvider即可。
3. 依赖与打包验证
- 在应用A、B的
pom.xml中引入公共模块C的依赖:
<!-- 应用A/B的pom.xml --> <dependency> <groupId>你的项目groupId</groupId> <artifactId>module-c</artifactId> <version>模块C的版本号</version> </dependency>
- 执行
mvn clean package打包应用A/B时,Maven会自动将version.properties中的${project.version}替换为当前应用的版本号;启动应用后,访问appA/deployedVersion或appB/deployedVersion就能得到对应应用的版本。
内容的提问来源于stack exchange,提问作者sepointes
相关产品推荐
相关产品推荐

