如何让SpringBoot Maven公共模块的banner.txt自动加载Maven属性
解决方案
方案一:Maven资源过滤直接替换Banner变量(推荐)
直接在模块打包阶段用Maven将banner.txt中的占位符替换为实际版本,无需Spring参与变量解析,子应用引入后即可直接显示正确版本。
步骤:
- 修改
banner.txt中的占位符,将${banner.version.library}替换为Maven过滤格式@version.library@(避免与Spring的${}语法冲突):
My Application Banner: ${application.title} ${application.formatted-version} MyLibraryVersion (v@version.library@) Spring-Boot ${spring-boot.formatted-version} JAVA-VERSION (v${java.version})
- 在模块的
pom.xml中配置Maven资源插件,开启对banner.txt的过滤:
<build> <resources> <resource> <directory>src/main/resources</directory> <!-- 仅对banner.txt开启过滤,避免影响其他资源文件 --> <includes> <include>banner.txt</include> </includes> <filtering>true</filtering> </resource> <!-- 其他资源保持原样,不开启过滤 --> <resource> <directory>src/main/resources</directory> <excludes> <exclude>banner.txt</exclude> </excludes> </resource> </resources> </build>
打包模块时,Maven会自动将@version.library@替换为1.0.0,子应用引入模块后,启动时直接加载替换后的banner.txt,无需任何额外配置。
方案二:SpringBoot自动配置注入属性
通过模块的自动配置机制,将banner.version.library属性自动注入Spring环境,子应用无需手动配置。
步骤:
- 在模块中创建
src/main/resources/library-banner.properties文件,内容如下(Maven将过滤@version.library@):
banner.version.library=@version.library@
- 在
pom.xml中配置资源过滤,让Maven处理该properties文件:
<build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>library-banner.properties</include> </includes> <filtering>true</filtering> </resource> <!-- 其他资源配置保持原样 --> </resources> </build>
- 创建自动配置类
BannerAutoConfiguration,加载该属性文件:
package com.example.mylibrarybanner; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; @Configuration @PropertySource("classpath:library-banner.properties") public class BannerAutoConfiguration { }
- 注册自动配置:在模块中创建
src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件,写入配置类的全限定名:
com.example.mylibrarybanner.BannerAutoConfiguration
子应用引入模块后,SpringBoot会自动加载该配置类,将banner.version.library属性加入环境,banner.txt中的${banner.version.library}即可正常解析,无需子应用做任何额外配置。
方案对比
- 方案一:最简洁,无需Spring配置,打包阶段直接完成变量替换,性能最优,推荐使用。
- 方案二:适合需要在Spring环境中复用
banner.version.library属性的场景,灵活性更高但配置稍复杂。
内容的提问来源于stack exchange,提问作者Salvatore Bernardo
相关产品推荐
相关产品推荐

