Компрессор Yui StringIndexOutOfBoundsException на jboss

При сворачивании 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 ответа

Решение

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

Переупакованный источник можно найти здесь: http://viscri.co.uk/labs/tapestry/yuicompressor-rhino-bugfix-5.0.jar. Просто добавьте это к вашей поме:

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

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

Обходной путь: Для JBoss AS 7.1.1. Финал и 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.

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

Баночка с выбранным ответом (по состоянию на 26.09.2014) больше не существует.

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

https://github.com/timothykim/yuicompressor

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

Надеюсь, что это помогает всем, кто сталкивается с этой проблемой.

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

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

Другие вопросы по тегам