Сбой YUICompressor - ошибка переполнения стека - PullRequest
4 голосов
/ 12 января 2012

Я часто получаю то, что кажется ошибкой переполнения стека ;-) от YUICompressor. Ниже приведена первая часть тысяч строк ошибок, возникающих при попытке сжать таблицу стилей css размером 24074 байта (а не «Причина, вызванная java.lang.StackOverflowError, примерно на 8 строк ниже):

iMac1:src jas$ min ../style2.min.css style2.css 
Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.yahoo.platform.yui.compressor.Bootstrap.main(Bootstrap.java:21)
Caused by: java.lang.StackOverflowError
    at java.lang.Character.codePointAt(Character.java:2335)
    at java.util.regex.Pattern$CharProperty.match(Pattern.java:3344)
    at java.util.regex.Pattern$Branch.match(Pattern.java:4114)

... (плюс еще 1021 строка ошибок)

Ошибки обычно возникают после добавления нескольких строк в сжатый файл. Css в порядке, и прекрасно работает в несжатом формате. Я не вижу определенного шаблона для типов селекторов, добавляемых в файл, которые вызывают ошибки. В этом случае добавление следующего селектора в ранее сжимаемый файл приводило к ошибкам:

#thisisatest
{
    margin-left:87px;
}

Мне интересно, есть ли флаг в java для увеличения стека, который мог бы помочь. Или, если это не проблема, то что?

EDIT:

Когда я писал этот вопрос, меня осенило, что я должен проверить команду java, чтобы увидеть, есть ли параметр для увеличения стека. Оказывается, это -Xssn, где «n» - это параметр, указывающий размер стека. Значение по умолчанию 512k. Итак, я попробовал 1024k, но это все равно привело к переполнению стека. Попытка 2048k работает, однако, и я думаю, что это может быть решением.

РЕДАКТИРОВАТЬ 2:

Несмотря на то, что я больше не использую этот метод для минификации, более конкретно здесь приводится полная команда (которую я настроил как псевдоним оболочки), показывающая, как используется параметр -Xss2048k:

java -Xss2048k -jar ~ / Документы / RepHunter / Веб-сайт \ Материалы / Код / Third / Party \ Библиотеки / YUI \ Компрессор / yuicompressor-2.4.8.jar --type css -o

1 Ответ

6 голосов
/ 26 января 2012

Как написано в моем редактировании, решение было добавить параметры в команду Java.Подсказка была строкой ошибки в 5-й строке «at», следующим образом:

at com.yahoo.platform.yui.compressor.Bootstrap.main(Bootstrap.java:21)
Caused by: java.lang.StackOverflowError

Видя, что проблема была в «StackOverlowError» ;-), предложила попытаться увеличить размер стека,По умолчанию 512k.Моя первая попытка 1024к не сработала.Однако увеличение его до 2048k сработало, и у меня больше не было проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...