页面css和js缓存是前端常见的问题,maven有专门的插件maven-assembly-plugin可以处理
参考https://blog.csdn.net/weixin_34336292/article/details/91979174
当同时使用了assembly和replacer时,有些需要注意的地方,记录一下
assembly插件fileSets代码如下:
<fileSets>
<fileSet>
<directory>${basedir}/target/classes</directory>
<outputDirectory>WEB-INF/classes/</outputDirectory>
</fileSet>
<fileSet>
<directory>${basedir}/src/main/webapp/</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
</fileSets>
修改为如下即可
<fileSets>
<fileSet>
<directory>${basedir}/target/classes</directory>
<outputDirectory>WEB-INF/classes/</outputDirectory>
</fileSet>
<fileSet>
<directory>
${project.build.directory}/${project.build.finalName}
</directory>
<!--需要排除的内容-->
<excludes>
<exclude>/WEB-INF/classes/**</exclude>
<exclude>/WEB-INF/lib/**</exclude>
</excludes>
<!--需要包含的内容-->
<includes>
<include>/WEB-INF/web.xml</include>
<include>/WEB-INF/views/**</include>
<include>/resources/**</include>
<include>/index.jsp</include>
</includes>
<outputDirectory>/</outputDirectory>
</fileSet>
</fileSets>
原理:
原始配置是将源代码src/main/webapp/ 复制到打包war文件中,但是我们现在需要的页面(ftl或jsp等)是replacer插件替换后的文件,不在src目录,因此需要使用target下的文件。
替换后的${project.build.directory}/${project.build.finalName}是target下的打包临时文件夹,里边包含已经编译的classes和lib等,这些需要排除,因此使用excludes标签.
/WEB-INF/*下是替换后的页面文件和其他web资源等,是我们需要的,因此需要使用includes引入。
研究要点:比较原始打包和修改后的打包文件,一定要包含所有需要的文件及文件夹(以及classes文件和lib文件)