【问题标题】:Yui compressor StringIndexOutOfBoundsException on jbossjboss上的Yui压缩器StringIndexOutOfBoundsException
【发布时间】:2011-07-11 15:27:44
【问题描述】:

当使用 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 配置中提取的两个 jar 中:

<dependency>
<groupId>com.yahoo.platform.yui</groupId>
<artifactId>yuicompressor</artifactId>
<version>2.4.6</version>
</dependency>

有什么方法可以使用 maven 排除等或升级我的 YUI 版本来解决这个问题。它只是不起作用,我不想编写自定义类加载器,这似乎很愚蠢。

请帮忙!

【问题讨论】:

  • 我也有这个问题!该死的地狱!我的是tomcat 6。
  • 你重新打包成功了吗?最后我把大部分的犀牛资源塞进了我的包裹里。如果你有几天时间,我可能可以在 github 上提供这个包?
  • 我已经完成了同样的重新打包,我正在等待 YUI 团队方面的工作修复,但我怀疑它会被修复,采用他们编程的方式......
  • 我提交了一个错误:github.com/yui/yuicompressor/issues/161

标签: java javascript jboss yui tapestry


【解决方案1】:

解决方法:对于 JBoss AS 7.1.1.Final 和 YUICompressor 2.4.7

从依赖中排除犀牛:

        <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,那么您似乎会再次收到此错误。

【讨论】:

    【解决方案2】:

    我通过自己重新打包 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>
    

    这应该可行。

    【讨论】:

    • 是的,它们纯粹的小蚂蚁生物完全基于类加载器中的库序列,这太糟糕了,以至于我仍然无法呼吸,写它brrr!他们之所以工作,是因为他们使用 ant,而在应用程序服务器上则相反。我已经完成了您描述的包装,并且可以正常工作。
    【解决方案3】:

    所选答案的(截至 2014 年 9 月 26 日)jar 不再存在。

    所以,我创建了一个 yuicompressor 的分支,其中整个 rhino 包嵌入到 yuicompressor 包中,并将其命名为 yui。

    https://github.com/timothykim/yuicompressor

    只需克隆 repo 并运行 ant 即可获取 jar。

    希望这对遇到此问题的其他人有所帮助。

    【讨论】:

      【解决方案4】:

      真的,您在 JBoss 中遇到类加载器问题?

      您将不得不对竞争的 rhino JAR 文件进行某种排除。为什么 Rhino 在类路径上?它可能是 JBoss 的一个可选功能,您可以将其关闭并避免冲突。

      【讨论】:

      • Rhino 位于类路径中,因为 maven 打包的 yuicompressor 依赖于它。基本上 yui 覆盖了几个 rhino 类,但不是全部,如果排除了 rhino,则会导致 classNotFound 异常,否则会导致上述问题。我打算向 Tapestry 邮件列表发送一封关于此问题的邮件,因为我认为在 Tapestry 5.3 中使用 yui 会导致同样的问题。最后我只是在我自己的定制罐子里把犀牛和 yui 一起吃掉了。
      • 他们在这里描述了这个问题:yuilibrary.com/projects/yuicompressor/ticket/2528114。他们说它已经解决了,但我对此表示怀疑,因为事实是这样写的。至少今天下载的源码包没有做任何事情。
      猜你喜欢
      • 1970-01-01
      • 2011-12-31
      • 1970-01-01
      • 1970-01-01
      • 2011-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-01
      相关资源
      最近更新 更多