首先介绍一下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)
今天的文章java 压缩js css_Java使用YUI Compressor压缩JS/CSS文件分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/27573.html