java 压缩js css_Java使用YUI Compressor压缩JS/CSS文件

首先介绍一下YUI Compressor,它是一个用来压缩JS和CSS文件的工具,采用Java开发。JavaScript和CSS缩小的目标是始终保持代码的操作质量,同时减少其整体字节占用,YUI Compressor设计为100%安全的JavaScript分选程序,并且比大多数其他工具具有更高的压缩比。与JSMin相比,YUI Library 的测试节省了20%以上(HTTP压缩后为10%)。YUI Compressor还可以通过使用Isaac Schlueter的基于正则表达式的CSS minifier 的端口来压缩CSS文件。,下面为大家分享一下使用yuicompressor压缩js文件和压缩css文件。

YUI Compressor官方网址:http://yui.github.io/yuicompressor/

从Maven repository中央仓库下载yuicompressor-2.4.8.jar最新版,利用yuicompressor-2.4.8.jar包通过命令的方法实现压缩Js和压缩CSS:

//压缩JS文件

java -jar yuicompressor-2.4.8.jar --type js --charset utf-8 -v tmp.js > packed.js

//压缩CSS文件

java -jar yuicompressor-2.4.8.jar --type css --charset utf-8 -v tmp.css > packed.css

Java中使用yuicompressor压缩js文件,(yuicompressor压缩css文件,比较简单此处省略,有问题可留言)具体实现代码如下:public void jscompress(HttpServletResponse response,String content,String type) throws IOException {

Reader in = new InputStreamReader(IOUtils.toInputStream(content));

JavaScriptCompressor compressor = new JavaScriptCompressor(in, new ErrorReporter() {

public void warning(String message, String sourceName,

int line, String lineSource, int lineOffset) {

if (line 

System.err.println("/n[WARNING] " + message);

} else {

System.err.println("/n[WARNING] " + line + ':' + lineOffset + ':' + message);

}

}

public void error(String message, String sourceName,

int line, String lineSource, int lineOffset) {

if (line 

System.err.println("/n[ERROR] " + message);

} else {

System.err.println("/n[ERROR] " + line + ':' + lineOffset + ':' + message);

}

}

public EvaluatorException runtimeError(String message, String sourceName,

int line, String lineSource, int lineOffset) {

error(message, sourceName, line, lineSource, lineOffset);

return new EvaluatorException(message);

}

});

if(type!=null && type.equals("yui")){

compressor.compress(response.getWriter(), -1, true, false, false, false);

}else if(type!=null && type.equals("pack")){//普通压缩

compressor.compress(response.getWriter(), 0, true, false, false, false);

}

}

在运行时抛出“java.lang.StringIndexOutOfBoundsException: String index out of range: 17”异常,具体日志如下:java.lang.StringIndexOutOfBoundsException: String index out of range: 17

at java.lang.String.substring(String.java:1907)

at com.yahoo.platform.yui.compressor.JavaScriptCompressor.printSourceString(JavaScriptCompressor.java:269)

at com.yahoo.platform.yui.compressor.JavaScriptCompressor.parse(JavaScriptCompressor.java:333)

at com.yahoo.platform.yui.compressor.JavaScriptCompressor.(JavaScriptCompressor.java:536)

at com.yoodb.tools.compress.CompressController.jscompress(CompressController.java:74)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:601)

解决方法:

在pom.xml文件中增加如下内容,排除rhino依赖,用于解决“java.lang.StringIndexOutOfBoundsException”异常:

com.yahoo.platform.yui

yuicompressor

2.4.8

rhino

js

注意:

避免js文件中出现中文,或者通过其他途径解决中文问题,否则抛出“org.mozilla.javascript.EvaluatorException”异常,具体日志如下:org.mozilla.javascript.EvaluatorException: Compilation produced 1 syntax errors.

at com.yoodb.tools.compress.CompressController$1.runtimeError(CompressController.java:95)

at org.mozilla.javascript.Parser.parse(Parser.java:396)

at org.mozilla.javascript.Parser.parse(Parser.java:340)

at com.yahoo.platform.yui.compressor.JavaScriptCompressor.parse(JavaScriptCompressor.java:315)

at com.yahoo.platform.yui.compressor.JavaScriptCompressor.(JavaScriptCompressor.java:536)

at com.yoodb.tools.compress.CompressController.jscompress(CompressController.java:75)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值