千家信息网

获取Maven项目版本号的方式有哪些

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,小编给大家分享一下获取Maven项目版本号的方式有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Maven 是经常用来创建项目的一个工具,主要是因为它方便项目构建、管理以及下载
千家信息网最后更新 2026年10月31日获取Maven项目版本号的方式有哪些

小编给大家分享一下获取Maven项目版本号的方式有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

Maven 是经常用来创建项目的一个工具,主要是因为它方便项目构建、管理以及下载 jar 包。

目前大多数Spring Boot项目都会打成Jar包,所以什么War包、Ear包的就先不摸索了。

Jar包的秘密

我们先解压一个Spring Boot应用Jar包看看里面能不能找到一些蛛丝马迹。在META-INF文件夹中找到了两个相关的东西,一个是MANIFEST.MF:

Manifest-Version: 1.0Spring-Boot-Classpath-Index: BOOT-INF/classpath.idxImplementation-Title: spring-boot-versionImplementation-Version: 1.0.23Spring-Boot-Layers-Index: BOOT-INF/layers.idxStart-Class: cn.felord.SpringBootVersionApplicationSpring-Boot-Classes: BOOT-INF/classes/Spring-Boot-Lib: BOOT-INF/lib/Build-Jdk-Spec: 1.8Spring-Boot-Version: 2.4.5Created-By: Maven Jar Plugin 3.2.0Main-Class: org.springframework.boot.loader.JarLauncher

里面包含了我定义的版本号1.0.23,Implementation-Version这个值好像通过代码能够获得:

String version = this.getClass().getPackage().getImplementationVersion()

但是用IDE启动发现version=null,不过用java -jar运行时version = 1.0.23。可能与IDE运行并不是通过jar的方式有关。

另一个是pom.properties,Maven项目编译会生成一个Properties配置文件:

artifactId=spring-boot-versiongroupId=cn.felordversion=1.0.23

这岂不是读取Properties文件就可以了?

  String path = "META-INF/maven/cn.felord/spring-boot-version/pom.properties";  ClassPathResource resource = new ClassPathResource(path);  InputStream inputStream = resource.getInputStream();  try (InputStreamReader reader = new InputStreamReader(inputStream)) {      try (BufferedReader bufferedReader = new BufferedReader(reader)) {          bufferedReader.lines()                                .forEach(System.out::println);         }     } catch (Exception ignored) {  }

这岂不是读取Properties文件就可以了?

  String path = "META-INF/maven/cn.felord/spring-boot-version/pom.properties";  ClassPathResource resource = new ClassPathResource(path);  InputStream inputStream = resource.getInputStream();  try (InputStreamReader reader = new InputStreamReader(inputStream)) {      try (BufferedReader bufferedReader = new BufferedReader(reader)) {          bufferedReader.lines()                                .forEach(System.out::println);         }     } catch (Exception ignored) {  }

依然只能从jar读取,而且比较麻烦。这两种方式都要依赖jar包,有木有不单纯依赖jar包的呢?

Maven资源插件过滤

Maven在构建项目时可以通过资源插件将构建属性即pom.xml中的属性注入到指定的资源文件中,具体操作为:

  ...                src/main/resources      true              main.properties              ...

恰好spring-boot-starter-parent中已经设置了这种方式。

              ${basedir}/src/main/resources        true                  **/application*.yml          **/application*.yaml          **/application*.properties              

如果你是application.properties,你可以通过下面的方式来接收版本号:

application.version = ${project.version}

如果是application.yaml,你可以通过下面的方式来接收版本号:

application:  version: '@project.version@'

然后如何取值就不用多说了吧。这种方式不依赖jar包,使用起来也很简单。

Spring Boot提供

Spring Boot其实已经内置了获取项目构建信息的自动配置ProjectInfoAutoConfiguration,它包含一个条件BeanBuildProperties:

    @ConditionalOnResource(        resources = {"${spring.info.build.location:classpath:META-INF/build-info.properties}"}    )    @ConditionalOnMissingBean    @Bean    public BuildProperties buildProperties() throws Exception {        return new BuildProperties(this.loadFrom(this.properties                                                 .getBuild()                                                 .getLocation(), "build",                                                     this.properties                                                 .getBuild().getEncoding()));    }

这个BuildProperties提供了不少构建信息:

public class BuildProperties extends InfoProperties {    public BuildProperties(Properties entries) {        super(processEntries(entries));    }    public String getGroup() {        return this.get("group");    }    public String getArtifact() {        return this.get("artifact");    }    public String getName() {        return this.get("name");    }    public String getVersion() {        return this.get("version");    }    public Instant getTime() {        return this.getInstant("time");    }   }

其中的条件build-info.properties可以通过Spring Boot插件spring-boot-maven-plugin执行下面的命令生成:

mvn spring-boot:build-info

我们只需要配置插件为:

    org.springframework.boot    spring-boot-maven-plugin                                                            build-info                                        

就能使得BuildProperties生效,我们可以轻松取得相关的信息:

{  "version" : "1.0.23",  "group" : "cn.felord",  "artifact" : "spring-boot-version",  "name" : "spring-boot-version",  "time" : {    "epochSecond" : 1620664643,    "nano" : 591000000  }}

看完了这篇文章,相信你对"获取Maven项目版本号的方式有哪些"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

方式 项目 版本 文件 可以通过 插件 信息 资源 面的 配置 属性 条件 篇文章 生成 运行 蛛丝马迹 不用 东西 两个 代码 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 什么是科技互联网 善班互联网科技 互联网科技公司官网 奇酷互联网科技公司 宜安科技 互联网金融 友谊互联网络科技 菲比寻常互联网科技 狮子座互联网科技培训 西藏七维空间互联网科技有限公司 互联网科技有哪些公司 互联网为啥属于高科技 互联网科技商业 青海科技产业互联网发展 互联网科技的全部知识 佛山市拉法互联网科技有限公司 国大互联网教育科技有限公司薪资 互联网相关科技技术 广州互联网高科技取餐柜 数字科技和互联网金融哪个好 颐高云石互联网科技 百单网互联网科技有限公司怎么样 杭州互联网科技公司 玖二柒互联网科技公司待遇 北京大学互联网科技怎么样 中化能源互联网科技招聘 互联网数据科技专业 云南省自由互联网科技有限公司 广东鹅鹅鹅互联网科技有限公司 互联网科技手机排行榜 互联网公司属于科技吗
0