YUI Compressor Maven插件可以压缩/合并js或css文件,经常用在Maven项目中,但最近发现在wabapp中执行了 mvn install 命令进行发布之后,终端中显示插件已经执行了压缩的动作,但在输出文件夹或者war包中js和css文件都还是未压缩的原始文件。
项目./pom.xml文件相关内容如下:
这样执行 mvn install 命令之后发现虽然执行了压缩任务,但是在目标目录下和war包中的js和css文件都是未经过压缩的文件。经过分析应该是执行顺序的问题,即yuicompress是在process-resources阶段首先执行的,然后是war命令拷贝原始的资源文件到目标目录,这个时候就将前面压缩过的文件覆盖了。
于是将yuicompressor-maven-plugin中execution的phase修改为install,再执行 mvn install 命令之后发现最终目标目录中的js和css文件已经是压缩过的了,但是war包里面的还是未压缩的。顺便说一句,在maven 2.x不需要显示地指定phase的,3.x之后必须指定。将phase修改为install是将压缩的执行顺序放到最后阶段,也就是说复制资源文件在前,压缩在后,但在war包生成之后,因此war包中的js和css文件是未经过压缩的。
最终将yuicompressor-maven-plugin中execution的phase依然设置为process-resources,然后在maven-war-plugin中将js和css文件排除掉即可,即maven-war-plugin的配置修如下:
参考资料:
yuicompressor maven plugin and maven-war-plugin
How to exclude files from being copied, by maven, into the exploded war
牛逼