繁体   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