mvnrepository YUICompressor 的bug?

YUICompressor 是一个优秀的js&css的压缩工具。系统使用其2.4.8版本的jar压缩css和js。开发阶段一切正常,但部署到测试环境和线上环境后,js压缩失败,报IndexOutOfBoundsException

看了下其逻辑,大致是先将待压缩的文本做预处理:识别文本中的function关键字、语句等特征部分,插入一些这些特征部分的标识符和长度信息;再根据这些信息构建压缩后的文本。比对了下测试环境和开发环境中预处理后的文本,发现测试环境中预处理后的文本在最末尾处的长度信息有误,导致substring的endIndex超出了文本长度。

测试环境和开发环境,源文本唯一的差别是字符串连接时使用的折行符,windows是回车换行,linux是回车,但经验判断不太可能是这个原因导致的。系统排除折行符的差异后,对比预处理后的文本字节码,发现字节码有差异。从源代码逻辑里,无法猜测导致差异的原因,故在源代码org.mozilla.javascript.Parser里加入了一些输出预处理过程的代码,发布到测试环境。。。之后发现测试环境一直报与新增代码相关的NoSuchField错误。很奇怪,又是开发环境不报错,测试环境报错。怀疑jar导致Parser类冲突了,搜索了下Parser类,发现Rhino(java版本的js解析器)也有一个Parser,而mvnrepository的yuicompressor是依赖了rhino的jar的。删除rhino的jar后,程序正常。(没有仔细阅读yuicompressor的源码,不知此举会不会带来其他一些bug)

jar在不同应用服务器里的加载顺序会不同,开发环境使用jetty,优先加载了yuicompressor的Parser;测试环境使用tomcat,优先加载了rhino的Parser。在使用yuicompressor的JavaScriptCompressor取压缩js时,报错。程序不能预设jar的加载顺序。

时间: 2024-10-23 02:08:14

mvnrepository YUICompressor 的bug?的相关文章

Maven 初学+http://mvnrepository.com/

了解 maven是一款服务于java平台的自动化构建工具(项目管理工具) 构建:全方位.多角度.深层次地建立 项目构建是一个项目从:源代码.编译.测试.打包.部署.运行的过程 用来解决团队开发遇到的问题 如: 统一 jar包 统一配置文件,单元测试 的代码位置即 目录结构的统一 传统的项目构建过程 1)在eclipse中创建一个java web工程 2)在工程中编写源代码及配置文件等 3)对源代码进行编译,java文件编译成class文件 4)执行Junit单元测试 5)将工程打成war包部署至

解决myeclipse中struts2 bug问题包的替换问题

因为struts2的bug问题,手工替换还是比较麻烦,但即便是最新的myeclipse2014也没有替换最新的struts2包,研究了一天,终于找到了解决办法.以下就解决方法与大家分享一下. 1.在perferences中找到 Myeclipse->Project Libraries,右边找到 struts2.1 Libraries,点击 Enable advanced configiguration,去掉以下文件前面的对勾,然后点击 Add custom Jars 2.在弹出的对话框中选择 A

关于工作中微信分享接口的bug

调用config 接口1的时候传入参数 debug: true 可以开启debug模式,页面会alert出错误信息.以下为常见错误及解决方法: invalid url domain当前页面所在域名与使用的corpid没有绑定(可在该企业号的应用可信域名中配置域名). invalid signature签名错误.建议按如下顺序检查: 确认签名算法正确,可用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 页面工具进行校验. 确认c

android 2.x上Dialog特定情况导致无法dismiss的bug

近期在做一个简单的对话框框架,作用不过做出一个显示效果在android 2.x到android 4.x上均类似的对话框. 思路比較简单,就是使用装饰模式包裹Dialog,暴露的接口调用时会自己主动完毕一些设置 可是遇到一个特别诡异的问题,在android 2.x上的Dialog对话框无法被dismiss,仅仅要弹出来界面就卡死,强行使用eclipse又一次run的话会导致android设备黑屏无响应,假设是模拟器,则直接崩溃,看到启动画面.并且这个还不是ANR错误. 后来通过删减代码找到了问题的

ThinkPHP3.2.3 foreach嵌套循环bug

有两个数组authA和authB authA如下 1 Array 2 ( 3 [0] => Array 4 ( 5 [auth_id] => 1 6 [auth_name] => 文章管理 7 [auth_pid] => 0 8 [auth_c] => 9 [auth_a] => 10 [auth_level] => 0 11 ) 12 13 [1] => Array 14 ( 15 [auth_id] => 4 16 [auth_name] =>

BUG YII2.0 cURL error 6: Could not resolve host:

BUG描述:登录直接显示 原因:服务器设置端口权限,或者DNS毛病 解决方案:只能去服务器端设置,配置端口 DNS: 修改dns 114.114.114.114 或者 8.8.8.8

SPARK大数据计算BUG处理:

大数据计算BUG处理: 程序修改前资源情况: Driver : 1台 Worker : 2台 程序提交申请内存资源 : 1G内存 内存分配情况 : 1. 20%用于程序运行 2. 20%用于Shuffle 3. 60%用于RDD缓存 单条TweetBean大小 : 3k 1. 内存溢出 原因:因为程序会把所有的TweetBean查询出来并且合并(union),该操作在内存中进行.则某个campaign数据量较大时,如500W数据,则500W*10k=50G,超出内存限制. 解决方法: 先按数据量

移动端上传照片 预览+draw on Canvas demo(解决iOS等设备照片旋转90度的bug)

背景: 本人的一个移动端H5项目,需求如下: 手机相册选取或拍摄照片后在页面上预览 然后绘制在canvas画布上. 这里,我们先看一个demo(http://jsfiddle.net/q3011893/83qfqpk8/embedded/) 操作步骤: 1.点击选择文件,拍摄一张照片,此时"预览:"文字下会显示你刚才拍摄的照片: 2.再点击"draw on Canvas",该按钮下的画布会绘制你刚才拍摄的照片. 正常的结果: 正文: 让input file支持拍照+

hdu1829(A Bug's Life)

题目链接:传送门 题目大意:有n个昆虫,有m组关系,接下来m行表示两个昆虫性别不同,问是否有矛盾情况(同男同女) 题目思路:并查集的高级应用,开两倍数组大小,后n个数组表示和当前昆虫不同性别的集合 #include <iostream> #include <cstdio> #include <cstdlib> #include <cmath> #include <algorithm> #include <cstring> #inclu