Java jboss上的Yui压缩程序StringIndexOutOfBoundsException
使用2.4.6最小化yui时,我遇到以下问题: java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:232Java jboss上的Yui压缩程序StringIndexOutOfBoundsException,java,javascript,jboss,yui,tapestry,Java,Javascript,Jboss,Yui,Tapestry,使用2.4.6最小化yui时,我遇到以下问题: java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:232 at java.lang.String.substring(String.java:1934) at com.yahoo.platform.yui.compressor.JavaScriptCompressor.printSourceString(JavaScriptCompressor.java:267) at com.yahoo.pl
at java.lang.String.substring(String.java:1934)
at com.yahoo.platform.yui.compressor.JavaScriptCompressor.printSourceString(JavaScriptCompressor.java:267)
at com.yahoo.platform.yui.compressor.JavaScriptCompressor.parse(JavaScriptCompressor.java:330)
at com.yahoo.platform.yui.compressor.JavaScriptCompressor.<init>(JavaScriptCompressor.java:533)
位于java.lang.String.substring(String.java:1934)
位于com.yahoo.platform.yui.compressor.JavaScriptCompressor.printSourceString(JavaScriptCompressor.java:267)
位于com.yahoo.platform.yui.compressor.JavaScriptCompressor.parse(JavaScriptCompressor.java:330)
位于com.yahoo.platform.yui.compressor.JavaScriptCompressor.(JavaScriptCompressor.java:533)
它在通过IDE启动时可以工作,但在部署到jboss时却不能。这个地方:也讨论过同样的问题
显然,问题在于org/mozilla/javascript/Parser位于从我的maven配置中拉入的两个JAR中:
<dependency>
<groupId>com.yahoo.platform.yui</groupId>
<artifactId>yuicompressor</artifactId>
<version>2.4.6</version>
</dependency>
com.yahoo.platform.yui
真空压缩机
2.4.6
有什么方法可以解决这个问题,我可以使用maven排除等,或者升级我的YUI版本。这似乎很愚蠢,因为它根本不起作用,我不想编写自定义类加载器
请帮忙 真的,你在JBoss中遇到了类加载器问题吗
您必须对竞争对手的rhino JAR文件进行某种排除。为什么Rhino在课堂上?这可能是JBoss的一个可选功能,您可以通过这种方式关闭并避免冲突。我自己重新打包yuicompressor以包含大部分rhino源代码,从而解决了这个问题。见我对Howard M.Lewis Ship的回复 可以在此处找到重新打包的源:。只需将此添加到您的pom中:
<dependency>
<groupId>yuicompressorbugfix</groupId>
<artifactId>yuicompressor-rhino-bugfix</artifactId>
<version>5.0</version>
</dependency>
yuicompressorbugfix
您还需要排除tapestry引入的yuicompressor版本:
<dependency>
<groupId>org.apache.tapestry</groupId>
<artifactId>tapestry-yuicompressor</artifactId>
<version>5.3.2</version>
<exclusions>
<exclusion>
<groupId>com.yahoo.platform.yui</groupId>
<artifactId>yuicompressor</artifactId>
</exclusion>
</exclusions>
org.apache.tapestry
织锦压缩机
5.3.2
com.yahoo.platform.yui
真空压缩机
这应该是可行的。解决方案:适用于JBoss AS 7.1.1.Final和YUICompressor 2.4.7
从依赖项中排除rhino:
<dependency>
<groupId>com.yahoo.platform.yui</groupId>
<artifactId>yuicompressor</artifactId>
<version>${yuicompressor.version}</version>
<exclusions>
<exclusion>
<groupId>rhino</groupId>
<artifactId>js</artifactId>
</exclusion>
</exclusions>
</dependency>
com.yahoo.platform.yui
注意:如果通过其他方式在类路径中有一个rhino,那么您可能会再次遇到此错误。所选答案(截至2014年9月26日)的jar不再存在
因此,我创建了一个yuicompressor分支,其中整个rhino包嵌入到yuicompressor包中,并将其命名为yui
只需克隆repo并运行ant
即可获得jar
希望这能帮助其他遇到这个问题的人。Rhino走上了类路径,因为maven打包的yuicompressor依赖于它。基本上yui覆盖了几个rhino类,但不是全部,如果rhino被排除,则会导致classNotFound异常,如果rhino未被排除,则会导致上述问题。我打算就此向tapestry邮件列表发送一封邮件,因为我认为在tapestry 5.3中使用yui会导致同样的问题。最后,我把rhino和yui一起放在自己定制的罐子里,他们在这里描述了问题:。他们说这个问题已经解决了,但我怀疑这是怎么写的。今天下载的源代码包,至少没有做任何事情。我也有这个问题!该死!我的是tomcat 6,你重新打包了吗?最后,我把大部分犀牛来源都塞进了我的包裹里。如果你有几天的时间,我可能可以在github上提供这个包?我已经做了同样的重新打包,我正在等待YUI团队的工作修复,但我相信它会被修复,按照他们的编程方式……我提出了一个错误:是的,它们纯粹的小蚂蚁生物完全基于类加载器中的库序列,这病得我都快喘不过气来了!它们之所以能工作是因为它们使用ant,而在应用服务器上则相反。我已经完成了你所描述的包装,并且它可以正常工作。