在jboss上的Yui压缩器StringIndexOutOfBoundsException

luk*_*ewm 11 javascript java 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.platform.yui.compressor.JavaScriptCompressor.parse(JavaScriptCompressor.java:330)
at com.yahoo.platform.yui.compressor.JavaScriptCompressor.<init>(JavaScriptCompressor.java:533)
Run Code Online (Sandbox Code Playgroud)

它通过我的IDE启动时工作,但当部署到jboss时它没有.这个地方:http://yuilibrary.com/forum/viewtopic.php?p = 200686对同一个问题进行了一些讨论.

显然问题是org/mozilla/javascript/Parser在我的maven配置中拉入的两个罐子里面:

<dependency>
<groupId>com.yahoo.platform.yui</groupId>
<artifactId>yuicompressor</artifactId>
<version>2.4.6</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

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

请帮忙!

小智 8

解决方法:适用于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>
Run Code Online (Sandbox Code Playgroud)

为什么?请参阅https://github.com/greenlaw110/greenscript/pull/29#issuecomment-4017147

注意:如果你通过其他方式在classpath中有一个rhino,那么你似乎会再次遇到这个错误.


luk*_*ewm 5

我通过自己重新包装yuicompressor来解决这个问题,包括大部分的犀牛来源.请参阅我对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>
Run Code Online (Sandbox Code Playgroud)

如果您没有运行自己的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>
Run Code Online (Sandbox Code Playgroud)

这应该工作.