Компрессор Yui StringIndexOutOfBoundsException на jboss - PullRequest
11 голосов
/ 11 июля 2011

При сворачивании yui с 2.4.6 я получаю эту проблему:

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:

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

Можно ли как-то решить эту проблему с помощью исключений maven и т. Д. Или путем обновления моей версии YUI.Кажется глупым, что это просто не работает, и я не хочу писать собственный загрузчик классов.

Пожалуйста, помогите!

Ответы [ 4 ]

8 голосов
/ 10 ноября 2012

Обходной путь: для 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

Примечание: если у вас есть какой-то другой носорог в classpath, похоже, вы снова получите эту ошибку.

5 голосов
/ 01 августа 2011

Я решил эту проблему, переупаковав yuicompressor самостоятельно, чтобы включить большую часть источника Rhino. Смотрите мой ответ Говарду М. Льюису Шипу.

Переупакованный источник можно найти здесь: 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

Вам также необходимо исключить версию 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>

Это должно работать.

1 голос
/ 27 сентября 2014

Jar выбранного ответа (по состоянию на 26.09.2014) больше не существует.

Итак, я создал форк yuicompressor, где весь пакет rhino встроен в пакет yuicompressor, и поместил его в пространство имен подyui.

https://github.com/timothykim/yuicompressor

Просто клонируйте репо и запустите ant, чтобы получить банку.

Надеюсь, что это поможет любому, кто столкнется с этой проблемой.

0 голосов
/ 13 июля 2011

Действительно, у вас проблемы с загрузчиком классов в JBoss?

Вам нужно будет сделать какое-то исключение в конкурирующем файле JAR с носорогом.Почему носорог на пути к классам?Это может быть дополнительная функция JBoss, которую вы можете отключить и избежать конфликта таким образом.

...