百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>JS教程> Maven无法将YUICompressor插件压缩后的js/css文件放到输出文件夹
分享文章到:

Maven无法将YUICompressor插件压缩后的js/css文件放到输出文件夹

发布时间:01/15 来源: 浏览: 关键词:
下面我们来看一篇关于Maven无法将YUICompressor插件压缩后的js/css文件放到输出文件夹中问题的解决办法吧。

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

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

 代码如下
 <project>
 
   <!-- 定义全局的变量 -->
   <properties>
     <!-- 编译编码设定 -->
     <build.source.encoding>UTF-8</build.source.encoding>
     <!-- webapp source dir -->
     <webapp.src.dir>${basedir}/src/main/webapp</webapp.src.dir>
     <!-- 默认的js&css输出总目录 -->
     <yuicompressor.output.dir>${project.build.directory}/${project.build.finalName}</yuicompressor.output.dir>
   </properties>
 
   <build>
     <plugins>
         <plugin>
           <groupId>net.alchim31.maven</groupId>
           <artifactId>yuicompressor-maven-plugin</artifactId>
           <version>1.1</version>
           <!-- 对该插件整体的配置信息 -->
           <configuration>
             <!-- 设定编码 -->
             <encoding>${build.source.encoding}</encoding>
             <!-- 输出主目录 where to put the generate files -->
             <outputDirectory>${yuicompressor.output.dir}</outputDirectory>
             <!-- 待处理文件目录 directory where source files will be pulled from -->
             <sourceDirectory>${webapp.src.dir}</sourceDirectory>
             <webappDirectory>${yuicompressor.output.dir}</webappDirectory>
             <!-- 无前缀名,默认为min- -->
             <nosuffix>true</nosuffix>
             <!-- 强制压缩 defalut is false -->
             <force>true</force>
             <!-- [js only] Minify only, do not obfuscate. -->
             <nomunge>false</nomunge>
             <jswarn>false</jswarn>
             <failOnWarning>false</failOnWarning>
             <!-- 将不需要压缩的js或css文件放在packs文件夹下 -->
             <excludes>
               <exclude>**/all.js</exclude>
               <exclude>**/all.css</exclude>
             </excludes>
             <aggregations>
               <aggregation>
                 <!-- insert new line after each concatenation (default: false) -->
                 <insertNewLine>true</insertNewLine>
               </aggregation>
             </aggregations>
           </configuration>
           <!-- js compressor -->
           <executions>
             <execution>
               <id>jsfiles</id>
               <!-- Maven 3.x之后必须指定phase,默认为process-resources -->
               <phase>process-resources</phase>
               <goals>
                 <goal>compress</goal>
               </goals>
               <configuration>
                 <aggregations>
                   <aggregation>
                     <!-- the ultimate javascript file that is served up to the browser -->
                     <output>${webapp.src.dir}/scripts/all.js</output>
                     <!--
                       files to include, path relative to output's directory or
                       absolute path
                     -->
                     <includes>
                       <!-- 压缩的js列表 -->
                       <include>scripts/a.js</include>
                       <include>scripts/b.js</include>
                     </includes>
                   </aggregation>
                 </aggregations>
               </configuration>
             </execution>
             <!-- css -->
             <execution>
               <id>cssfiles</id>
               <!-- Maven 3.x之后必须指定phase,默认为process-resources -->
               <phase>process-resources</phase>
               <goals>
                 <goal>compress</goal>
               </goals>
               <configuration>
                 <aggregations>
                   <aggregation>
                     <!-- the ultimate css file that is served up to the browser -->
                     <output>${webapp.src.dir}/styles/all.css</output>
                     <!--
                       files to include, path relative to output's directory or
                       absolute path
                     -->
                     <includes>
                       <include>styles/a.css</include>
                       <include>styles/b.css</include>
                     </includes>
                   </aggregation>
                 </aggregations>
               </configuration>
             </execution>
           </executions>
         </plugin>
       
       <!-- war -->
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-war-plugin</artifactId>
         <version>2.6</version>
         <configuration>
           <warSourceDirectory>${webapp.src.dir}</warSourceDirectory>
           <encoding>${build.source.encoding}</encoding>
         </configuration>
       </plugin>
 
     </plugins>
   </build>
 </project>

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

 代码如下

 <!-- war -->
 <plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-war-plugin</artifactId>
 <version>2.6</version>
 <configuration>
   <warSourceDirectory>${webapp.src.dir}</warSourceDirectory>
   <encoding>${build.source.encoding}</encoding>
   <warSourceExcludes>**/*.js,**/*.css</warSourceExcludes>
 </configuration>
 </plugin>

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有2人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板