Maven install之后无法将YUICompressor插件压缩后的js/css文件放到输出文件夹中的解决方法

YUI Compressor Maven插件可以压缩/合并js或css文件,经常用在Maven项目中,但最近发现在wabapp中执行了 mvn install 命令进行发布之后,终端中显示插件已经执行了压缩的动作,但在输出文件夹或者war包中js和css文件都还是未压缩的原始文件。

项目./pom.xml文件相关内容如下:


UTF-8

${basedir}/src/main/webapp

${project.build.directory}/${project.build.finalName}

net.alchim31.maven
yuicompressor-maven-plugin
1.1



${build.source.encoding}

${yuicompressor.output.dir}
${webapp.src.dir}
${yuicompressor.output.dir}

true

true

false
false
false


**/all.js
**/all.css




true






jsfiles
process-resources
compress





${webapp.src.dir}/scripts/all.js



scripts/a.js
scripts/b.js







cssfiles
process-resources
compress





${webapp.src.dir}/styles/all.css


styles/a.css
styles/b.css





org.apache.maven.plugins
maven-war-plugin
2.6

${webapp.src.dir}
${build.source.encoding}

这样执行 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的配置修如下:

org.apache.maven.plugins
maven-war-plugin
2.6

${webapp.src.dir}
${build.source.encoding}
**/*.js,**/*.css

参考资料:
yuicompressor maven plugin and maven-war-plugin
How to exclude files from being copied, by maven, into the exploded war

One thought to “Maven install之后无法将YUICompressor插件压缩后的js/css文件放到输出文件夹中的解决方法”

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注