Spring boot yaml文件配置maven打包时间和项目名称属性

在项目中,通常需要记录项目打包时间和版本信息,maven的pom.xml文件有这些信息,但是在程序代码中获取不到,可以通过yaml加入maven配置的方式来实现。

首先在yaml文件中加入以下配置:

# maven info
app:
  name: @project.name@
  version: @project.version@
  build:
    time: @build.timestamp@

这里的@project.name@和@project.version@就是pom文件信息,但是@build.timestamp@需要自己配置。

在pom.xml文件中,加入以下配置:

<properties>
	<build.timestamp>${maven.build.timestamp}</build.timestamp>
	<maven.build.timestamp.format>yyyy-MM-dd HH:mm:ss</maven.build.timestamp.format>
</properties>

这里的maven.build.timestamp.format是对maven打包时间做格式化。

加入build过滤。

<build>
	<resources>
		<resource>
			<filtering>true</filtering>
			<directory>src/main/resources</directory>
		</resource>
	</resources>
</build>

配置到这里基本就完成了。代码中就能够使用${app.name}方式来获取pom文件信息了。

这里maven install之后,yaml文件就会替换成pom文件信息,但是日常idea启动项目时,因为启动只是做了maven compile操作,所以不会替换,甚至还会报错。

found character ‘@‘ that cannot start any token.

有三种解决方式:

1、将配置加单引号或双引号,虽然能解决问题,但是日常启动的时候就不会被替换了。

# maven info
app:
  name: '@project.name@'
  version: '@project.version@'
  build:
    time: '@build.timestamp@'

2、使用 Maven 的 resources:resources 插件,推荐使用这种方式。

在 IDEA 的运行配置中,设置执行 resources:resources,它会强制 Maven 执行资源过滤。具体步骤如下:

  1. 在 IDEA 中打开 "Run/Debug Configurations"。

  2. 找到你的启动配置,点击 "Before Launch" 下的 “+”,添加一个新的 "Run Maven Goal"。

  3. 输入 resources:resources,这样在运行应用程序之前,IDEA 会自动执行资源过滤操作。

这样每次运行应用程序时,Maven 都会自动执行资源文件的属性替换。

3、使用 IntelliJ IDEA 的 Delegate Option,虽然能解决,但是启动很慢

在 IDEA 中,将构建和运行操作委托给 Maven,这样可以确保运行时包含 Maven 构建的所有步骤,包括资源文件替换:

  1. 在 IDEA 中进入 File > Settings > Build, Execution, Deployment > Build Tools > Maven

  2. 勾选 Delegate IDE build/run actions to Maven

启用后,IDEA 的构建和运行过程都会交由 Maven 处理,确保 yaml 文件中的属性在运行时已经被替换。

消息盒子

# 暂无消息 #

只显示最新10条未读和已读信息