maven 替换指定文件属性值
问题由来
接到一个需求:组装 http 协议的时候在 header 里面带上 User-agent , 但是 agent 里面需要动态获取当前操作系统、系统架构、当前项目版本和名称。本着最少维护成本的想法,否定了手动维护静态变量的选择,所以只能选择通过现有的技术自动化解决问题。
实现步骤
-
在项目的 resources 目录下创建 xx.properties 文件(也可以在自己喜欢的目录创建,不过稍后读取的时候会比较麻烦,所以建议是在 resources 下面创建),填写以下信息
project.version=${project.version} project.name=${project.name}
看名字就知道他们是什么意思了就不解释了
-
在 pom 文件的 build 标签里填入相应信息
<build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>xx.properties</include> </includes> <filtering>true</filtering> </resource> </resources> </build>
directory:指定需要替换的文件目录
include:指定需要替换的文件(可以使用*.*来通配)
filtering:true 开启替换 -
最后就是在代码里面读取配置
Properties props = System.getProperties(); // 这里有个小问题 getSystemResourceAsStream 和 getResourceAsStream 是有区别的,前者如果打成 jar 被依赖的话会报xx.properties找不到 // 替代写法,场景不同可以选需要的写法 // props.load(xx.class.getClassLoader().getResourceAsStream("xx.properties")); props.load(ClassLoader.getSystemResourceAsStream("xx.properties")); String name = props.getProperty("project.name"); String version = props.getProperty("project.version")