Компрессор 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, которую вы можете отключить и избежать конфликта таким образом.