java项目动态读取pom.xml设置的项目版本号(project.version)

1.情景展示

pom.xml设置的也有项目版本号

java类里面也需要设置项目的版本号

每次修改项目的版本号,都要改两遍,这就很麻烦了。

如果是springboot项目,很简单,我们只需要在配置文件中设置一个版本属性,它的值指定为:${project.version};

然后,在java类中获取配置文件中的版本属性即可。

但,我这一个简单的java maven项目,该如何动态获取到项目版本号呢?

2.具体分析

创建一个版本文件,并利用Maven构建工具实现内容的替换;

然后,封装一个工具类读取版本文件,并提供给外界使用。

3.解决方案

为项目创建resources目录。

创建一个版本文件,如:build.version,并将其放到resources目录下方。

文件内容

version=${project.version}

打开pom.xml

在build标签里面增加资源过滤配置

<resources>
	<resource>
		<directory>src/main/resources</directory> <!-- 资源文件所在目录 -->
		<filtering>true</filtering> <!-- 开启过滤 -->
	</resource>
</resources>
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-resources-plugin</artifactId>
	<version>${maven.resources.plugin.version}</version> <!-- 使用最新版或适合你项目的版本 -->
	<configuration>
		<encoding>UTF-8</encoding> <!-- 设置资源文件编码 -->
	</configuration>
</plugin>

说明:

我的build.version文件位于src/main/resources目录下。如果文件位于其他位置,请相应调整<directory>标签的内容。

这样一来,Maven在构建过程中会自动替换build.version文件中的${project.version}为pom.xml中定义的版本号。

 

创建java工具类读取build.version文件中的内容


import lombok.Getter;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * 项目版本设置工具类
 * @author Marydon
 * @version 1.0
 * @description
 * @date 2024-06-26
 * @email marydon20170307@163.com
 */
public class VersionUtils {
    /**
     * -- FIELD --
     *  版本文件名称
     */
    private static final String VERSION_PROPERTIES = "build.version";
    /**
     * -- GETTER --
     *  获取应用版本号
     * @return java.lang.String 应用版本字符串
     */
    @Getter
    private static String version;

    static {
        try (InputStream resourceStream = VersionUtils.class.getClassLoader().getResourceAsStream(VERSION_PROPERTIES)) {
            if (resourceStream == null) {
                throw new RuntimeException("build.version file is not found in the classpath.");
            }
            Properties properties = new Properties();
            properties.load(resourceStream);
            version = properties.getProperty("version", "UNKNOWN");
        } catch (IOException e) {
            throw new RuntimeException("Failed to read version from build.version", e);
        }
    }

}

调用

这样,Java类中就能获取到pom.xml定义的project.version的值了。

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

posted @ 2024-06-26 11:25  Marydon  阅读(25)  评论(0编辑  收藏  举报