Ant 执行 YUICompressor 任务压缩 JavaScript 和 CSS 文件,解决中文乱码问题,增加源文件字符编码集设定

发布 JavaScript 的时候,无论从代码保护还是提高性能角度,都应该对代码进行压缩,去除重叠的空白分隔符,混淆变量。雅虎交互(YUI)提供了非常强大的压缩工具,对 .js 文件和 .css 文件都有效。这里所说明的情况,是用 Ant 直接启动压缩任务。

首先,需要准备二个 .jar 文件,分别是 YUIAnt.jar 和 yuicompressor-2.4.x.jar 。本帖发表日期是 2012-4-5 周四,最新版是 yuicompressor-2.4.7 。
YUIAnt.jar  下载地址 http://www.ubik-ingenierie.com/miscellanous/YUIAnt/
yuicompressor-2.4.x.jar 下载地址 http://www.julienlecomte.net/yuicompressor/

在 Ant 的构建过程描述文件(build.xml)中,可以参考如下例子来引入。

其中 <compress> 标签的 charset 参数的含义是指定输出文件的字符编码集。原版存在无法以指定字符编码集读取源文件的问题。所以我对此(com.yahoo.platform.yui.compressor.YUICompressTask)进行了改造。此改造方法为原创,经测试无误。

其实,原先的设计根本就没有考虑到源文件字符编码集的问题。首先我们为 <compress> 标签增加 encoding 这个属性,用来指定源文件的字符编码集。然后在读取文件的时候,用这个 Ant 构建文件中指定的 encoding 来打开文件输入流。所有改造都只针对 com/yahoo/platform/yui/compressor/YUICompressTask.java 这一个文件。看了源文件,发现雅虎源代码的水平真是太不考究了……空格和 Tab 混用,行尾多余空白也不消除,空行也没有规范,注释也不指名调用顺序……不感叹了,下面是改写方法。

首先,要改变最开始的 import 部分。
原先的程序:

改为无误:

第二,属性确认方法要增加对 encoding 未指定的支持,并根据 YUI 官方的提议,修改 charset 默认值得逻辑。在 validate() 方法中修改。
原先的程序:

改为:
其中三目运算符优先级低于比较运算,高于赋值运算,刚好不用加括号。

第三,源文件 185 行是打开源文件以读取,原来是这么写的:
改为:
这么更改是因为 FileReader 不提供用指定字符编码集读取,所以要换成别的打开方式。

第四,在文件前边有对象成员变量声明,增加

在文件后边有一组 getter 和 setter ,增加


然后就可以了,编译一下,将编译出来的主 .class 替换掉原来 .jar 包中的 .class 文件,就可以用了。

以下提供源代码、.class 和 .jar 都改动了的合集。通过 CSDN 下载站上传。
http://download.csdn.net/detail/shanelooli/4200449

参考资料
用 Ant 调用 YUI Compressor : http://www.iteye.com/topic/368724
源文件字符集写死成 UTF-8 改造: http://moly.iteye.com/blog/718122

posted on 2012-04-05 10:46  springside5  阅读(334)  评论(0编辑  收藏  举报