Maven有一个内置的资源替换机制, 可以对由Maven管理的资源文件进行变量替换。 预定义的Maven属性变量包括${name},${version} ,${id},${project.version},${project.packaging}和${project.artifactId}等
熟悉FreeMarker的同学就会发现Maven使用和FreeMarker相同的方法来定义变量:${变量名}。
如果把FreeMarker模板文件放在Maven资源文件目录下(比如src/main/resources), 在缺省配置下, Maven打包工具会扫描这些FreeMarker模板文件并替换其中所有Maven可识别的变量。
比如
<input name="version" id="version" value='${version}'>
这时候编译后,target中的代码就会变成
<input name="version" id="version" value='0.0.1-SNAPSHOT'>
那么这个 0.0.1-SNAPSHOT 是哪来的呢,经查找是pom.xml中的
解决方法:
1. 最简单的是在FreeMarker模板中,避免使用Maven属性变量名, 比如将${version}替换成${userVersion}, 这样Maven就不会修改这个文件了。
2. 更好的方法是在Maven POM文件中声明对FreeMarker模板文件进行直接复制,不要进行任何Maven资源替换。 如下例所示
不对src/main/resources/page下的文件夹中的 .ftl文件进行替换,原封不动的复制过来,这样代码就不会被改变了
【右上角点个赞,谢谢】