在软件开发过程中,了解项目的构建版本对于调试、跟踪和管理软件发布至关重要。本文中,将使用 Maven 生成构建时间来为 Spring Boot 项目生成构建版本信息。
一、、使用 Maven 插件生成构建版本
可以使用 Maven 插件来生成构建版本信息。在本文中,我们将使用build-helper-maven-plugin
插件来生成时间戳作为构建版本信息。
1. pom.xml 配置
首先,我们需要在项目的pom.xml
文件中添加build-helper-maven-plugin
插件的配置。以下是配置示例:
<build>
<plugins>
<!-- 使用 build-helper-maven-plugin 插件生成时间戳或随机数 -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.6.0</version>
<executions>
<execution>
<id>generate-random-number</id>
<goals>
<goal>timestamp-property</goal>
</goals>
<phase>validate</phase>
<configuration>
<name>build.number</name>
<pattern>yyyyMMdd-HHmmss</pattern>
<locale>zh_CN</locale>
<timeZone>Asia/Shanghai</timeZone>
</configuration>
</execution>
</executions>
</plugin>
<!-- Maven Resources Plugin for filtering properties in resources -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.3.1</version>
<executions>
<execution>
<id>default-resources</id>
<phase>process-resources</phase>
<goals>
<goal>resources</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering> <!-- 启用资源文件过滤 -->
</resource>
</resources>
<delimiters>
<delimiter>@</delimiter>
</delimiters>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
在上述配置中,使用build-helper-maven-plugin
插件的timestamp-property
目标来生成一个时间戳,并将其存储在build.number
属性中。该插件的时间戳的格式默认为UTC时间,可以通过配置地区和时区。
为了在应用程序中使用构建版本信息,需要在资源文件中引用这个属性。我们可以使用maven-resources-plugin
插件来进行资源文件过滤。
在上述配置中,启用了资源文件过滤,并设置了资源文件的目录为src/main/resources
。
2. application.properties
为了在应用程序中使用构建版本信息,我们可以在application.properties
文件中定义一个属性,并使用${build.number}
来引用生成的构建版本信息。以下是示例:
build.number=devmode
build.version="${build.number}"
在上述配置中,定义了一个分别定义了build.number
和build.version
属性,并将build.version
的值设置为${build.number}
,在使用Idea进行调试时,会使用build.number的属;当使用maven构建项目时,build.version
属性将被替换为生成的构建版本信息;
如:
build.number=devmode
build.version="20240831-111514"
3. 应用中使用
接下来,可以在应用程序的代码中使用这个属性。以下是一个使用 Spring Boot 的示例:
@Log4j2
@RestController
@RequestMapping("/common")
public class IndexController {
@Value("${build.version}")
private String buildTime;
@GetMapping("/version")
public String version() {
return buildTime;
}
}
在上述代码中,使用@Value
注解将build.version
属性注入到buildTime
变量中。然后,我们在/version
端点中返回这个构建版本信息。