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 执行资源过滤。具体步骤如下:
在 IDEA 中打开 "Run/Debug Configurations"。
找到你的启动配置,点击 "Before Launch" 下的 “+”,添加一个新的 "Run Maven Goal"。
输入
resources:resources
,这样在运行应用程序之前,IDEA 会自动执行资源过滤操作。
这样每次运行应用程序时,Maven 都会自动执行资源文件的属性替换。
3、使用 IntelliJ IDEA 的 Delegate Option,虽然能解决,但是启动很慢
在 IDEA 中,将构建和运行操作委托给 Maven,这样可以确保运行时包含 Maven 构建的所有步骤,包括资源文件替换:
在 IDEA 中进入 File > Settings > Build, Execution, Deployment > Build Tools > Maven。
勾选 Delegate IDE build/run actions to Maven。
启用后,IDEA 的构建和运行过程都会交由 Maven 处理,确保 yaml
文件中的属性在运行时已经被替换。