Maven 生成编译时间和版本Java类

本文使用Maven插件来自动生成一个 Version.java 类,可以在Java代码中使用里面对应的常量,获取当前版本号和构建时间。

Maven编译后自动生成的 Version.java 文件内容如下所示:

java 复制代码
package com.shanhy.demo;

public final class Version {
    public static String NUMBER = "0.0.41-SNAPSHOT";
    public static String BUILD_TIME = "2023-08-15 10:54:16";
}

pom.xml 中插件的使用示例如下所示:

xml 复制代码
<plugin>
	<groupId>org.codehaus.mojo</groupId>
	<artifactId>build-helper-maven-plugin</artifactId>
	<version>3.4.0</version>
	<executions>
		<execution>
			<id>timestamp-property</id>
			<goals>
				<goal>timestamp-property</goal>
			</goals>
                     <configuration>
                         <name>current.time</name>
                         <pattern>yyyy-MM-dd HH:mm:ss</pattern>
                         <timeZone>GMT+8</timeZone>
                         <locale>zh_CN</locale>
                     </configuration>
		</execution>
	</executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>3.0.0</version>
    <executions>
        <execution>
            <goals>
                <goal>run</goal>
            </goals>
            <phase>generate-sources</phase>
            <configuration>
                <target>
                    <property name="src.dir" value="${project.build.sourceDirectory}"/>
                    <property name="package.dir" value="com/shanhy/demo"/>
                    <property name="package.name" value="com.shanhy.demo"/>
                    <!--maven.build.timestamp是UTC时间,跟北京时间有8个小时的时差,
                        使用插件 build-helper-maven-plugin:timestamp-property 解决这个时差问题-->
                    <!--<property name="buildtime" value="${maven.build.timestamp}"/>-->
                    <property name="buildtime" value="${current.time}"/>

                    <!--生成一个 Version.java 文件,里面生成常量,可以在Java代码中直接使用-->
                    <echo file="${src.dir}/${package.dir}/Version.java"
                          message="package ${package.name};${line.separator}${line.separator}"/>
                    <echo file="${src.dir}/${package.dir}/Version.java" append="true"
                          message="public final class Version {${line.separator}"/>
                    <echo file="${src.dir}/${package.dir}/Version.java" append="true"
                          message="    public static String NUMBER = &quot;${project.version}&quot;;${line.separator}"/>
                    <echo file="${src.dir}/${package.dir}/Version.java" append="true"
                          message="    public static String BUILD_TIME = &quot;${buildtime}&quot;;${line.separator}"/>
                    <echo file="${src.dir}/${package.dir}/Version.java" append="true"
                          message="}${line.separator}"/>
                </target>
            </configuration>
        </execution>
    </executions>
</plugin>

你也可用这种方法生成普通的版本配置文件,例如 version.properties,上文生成 java 文件是为了在 Java 代码中的相关业务中直接使用常量。


(END)

相关推荐
别惊鹊13 小时前
(三)安装和使用Maven
java·maven
腥臭腐朽的日子熠熠生辉17 小时前
解决maven失效问题(现象:maven中只有jdk的工具包,没有springboot的包)
java·spring boot·maven
伊成19 小时前
Springboot整合Mybatis+Maven+Thymeleaf学生成绩管理系统
java·maven·mybatis·springboot·学生成绩管理系统
汤姆大聪明20 小时前
Redisson 操作 Redis Stream 消息队列详解及实战案例
redis·spring·缓存·maven
努力的搬砖人.21 小时前
maven如何使用
java·后端·面试·maven
_Djhhh1 天前
基于SpringAOP面向切面编程的一些实践(日志记录、权限控制、统一异常处理)
java·spring boot·spring·maven·sprint
佩奇的技术笔记2 天前
中级:Maven面试题精讲
java·面试·maven
数据攻城小狮子2 天前
Java Spring Boot 与前端结合打造图书管理系统:技术剖析与实现
java·前端·spring boot·后端·maven·intellij-idea
eternal__day2 天前
Spring Boot 快速入手
java·spring boot·后端·spring·java-ee·maven
潘多编程2 天前
Gradle实战指南:从入门到进阶,与Maven的深度对比
java·maven