![](/img/trans.png)
[英]YUI Compressor throws StringIndexOutOfBoundsException when running in Tomcat from a WAR
[英]Yui compressor StringIndexOutOfBoundsException on jboss
當使用 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.platform.yui.compressor.JavaScriptCompressor.parse(JavaScriptCompressor.java:330)
at com.yahoo.platform.yui.compressor.JavaScriptCompressor.<init>(JavaScriptCompressor.java:533)
它在通過我的 IDE 啟動時有效,但在部署到 jboss 時無效。 這個地方: http://yuilibrary.com/forum/viewtopic.php?p=20086對同樣的問題進行了一些討論。
顯然,問題在於 org/mozilla/javascript/Parser 在從我的 maven 配置中提取的兩個 jars 中:
<dependency>
<groupId>com.yahoo.platform.yui</groupId>
<artifactId>yuicompressor</artifactId>
<version>2.4.6</version>
</dependency>
有什么辦法可以使用 maven 排除等或升級我的 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>
為什么? 見https://github.com/greenlaw110/greenscript/pull/29#issuecomment-4017147
注意:如果您通過其他方式在類路徑中有 rhino,那么您似乎會再次收到此錯誤。
我通過自己重新打包 yuicompressor 以包含大部分 rhino 源來解決了這個問題。 請參閱我對 Howard M. Lewis Ship 的回復。
重新打包的源代碼可以在這里找到: http://viscri.co.uk/labs/tapestry/yuicompressor-rhino-bugfix-5.0.jar 。 只需將其添加到您的 pom 中:
<dependency>
<groupId>yuicompressorbugfix</groupId>
<artifactId>yuicompressor-rhino-bugfix</artifactId>
<version>5.0</version>
</dependency>
如果您不運行自己的 nexus 版本,則必須將其安裝在要構建的機器上。 我認為這是您需要的命令: http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html
您還需要排除 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>
這應該有效。
所選答案(截至 2014 年 9 月 26 日)jar 不再存在。
因此,我創建了一個 yuicompressor 的分支,其中整個 rhino package 嵌入到 yuicompressor package 中,並將其命名為 yui。
https://github.com/timothykim/yuicompressor
只需克隆 repo 並運行ant
即可獲得 jar。
希望這可以幫助其他遇到此問題的人。
真的,您在 JBoss 中遇到 class 加載程序問題?
您將不得不對競爭的 rhino JAR 文件進行某種排除。 為什么 Rhino 在類路徑上? 它可能是 JBoss 的可選功能,您可以關閉並避免沖突。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.