出现的问题
/resources/template/test.rar 项目编译后在/target/classes/template/test.rar 下的zip文件损坏无法打开。经过对比配置排查发现是
<filtering>true</filtering>这条配置引起的问题
filtering的作用
maven的占位符解析表达式的使用场合默认只在pom文件范围内活动
如果想扩大它的活动范围,就必须指定需要扩大到哪些文件,然后指定filtering=true.然后maven的占位符解析表达式就可以用于它里面的表达式解析了.
<build> <resources> <resource> <directory>${project.basedir}/src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> <include>**/*.rar</include> <include>**/*.ftl</include> </includes> <filtering>true</filtering> </resource> </resources> </build>
1. Spring EL表达式和MAVEN的占位符表达式长得一样,但两者默认井水不犯河水,不能再Spring的范围内取maven的参数
2. filtering的作用就是打通两者的连接, 让井水犯河水, 具体来说是让Spring的范围内能取到maven的参数
3. filtering的使用要配合resource一起使用: 前者开启打通连接,后者指定打通的范围.
举例:
如果你的项目继承了spring-boot-starter-parent,
如果想在application.properties中使用maven的占位符以获取maven的参数,此时就不能用${},
因为可能会与EL表达式冲突,
怎么办?此时parent依赖将maven占位符表达式默认改为@var@的形式. 所以只能用@var@替代${var}
参考文章
https://www.cnblogs.com/wangxuejian/p/13551292.html