簡體   English   中英

Yui 壓縮器 StringIndexOutOfBoundsException on jboss

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM