java\springboot获取maven版本号
前言
java获取maven版本号
-
新建 java-templates 包
-
定义为 Generated Sources Root(非必须)
-
创建对应目录的文件地址并新建java类 VersionEnvironmentPostProcessor(自定义名称)
package com.example.demo.config; /** * */ public class VersionEnvironmentPostProcessor { /** * 获取当前项目版本号 */ private static final String projectVersion = "${project.version}"; }
目录如图
-
增加maven插件
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>templating-maven-plugin</artifactId> <version>1.0.0</version> <executions> <execution> <id>filter-src</id> <goals> <goal>filter-sources</goal> </goals> </execution> </executions> </plugin>
-
执行mvn clean install 可以在 target 目录下看到生成的文件版本号已经被替换了
将版本号加载到spring环境内
-
修改 VersionEnvironmentPostProcessor 类如下
package com.example.demo.config; import org.springframework.boot.SpringApplication; import org.springframework.boot.env.EnvironmentPostProcessor; import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.PropertySource; import org.springframework.core.env.StandardEnvironment; import java.util.HashMap; import java.util.Map; /** * */ public class VersionEnvironmentPostProcessor implements EnvironmentPostProcessor { /** * 获取当前项目版本号 */ private static final String projectVersion = "${project.version}"; @Override public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { Map<String, String> map = new HashMap<>(); map.put("spring.project.version", projectVersion); StandardEnvironment standardEnvironment = (StandardEnvironment) environment; standardEnvironment.getPropertySources().addLast(new VersionPropertySource(map)); } public static class VersionPropertySource extends PropertySource<Map<String, String>> { VersionPropertySource(Map<String, String> source) { super("versionPropertySource", source); } @Override public Object getProperty(String key) { return getSource().get(key); } } }
可将 standardEnvironment.getPropertySources().addLast(new VersionPropertySource(map)); 换成 standardEnvironment.getPropertySources().addFirst(new VersionPropertySource(map));
addLast 会加入到环境列表最后,这样遇到相同参数名时不会覆盖配置文件的参数值,addFirst 会加到最前面会覆盖其他相同名称的参数值 -
增加 spring.factories 文件让springboot启动加载
# Environment Post Processors org.springframework.boot.env.EnvironmentPostProcessor=\ com.example.demo.config.VersionEnvironmentPostProcessor
-
测试
package com.example.demo; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.Banner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DemoApplication { private static String projectVersion; public static void main(String[] args) { SpringApplication springApplication = new SpringApplication(DemoApplication.class); springApplication.setBannerMode(Banner.Mode.OFF); springApplication.run(args); System.out.println("projectVersion: " + projectVersion); } @Value("${spring.project.version}") public void setProjectVersion(String projectVersion) { DemoApplication.projectVersion = projectVersion; } }
2021-11-17 15:52:53.738 INFO 16400 — [ main] com.example.demo.DemoApplication : Starting DemoApplication on DESKTOP-U4M55JQ with PID 16400 (G:\workspace\demo\target\classes started by Administrator in G:\workspace\demo)
2021-11-17 15:52:53.740 INFO 16400 — [ main] com.example.demo.DemoApplication : No active profile set, falling back to default profiles: default
2021-11-17 15:52:53.996 INFO 16400 — [ main] com.example.demo.DemoApplication : Started DemoApplication in 0.445 seconds (JVM running for 0.774)
projectVersion: 0.0.1-SNAPSHOT
Process finished with exit code 0