我经常从YUICompressor那里得到一个看似是stackoverflow的错误;-)。以下是数千条错误行的第一部分,这些错误行来自于尝试压缩24074字节的css样式表(而不是“由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命令,看看是否有扩大堆栈的参数。原来它是-Xssn,其中“n”是表示堆栈大小的参数。其默认值为512k。所以我尝试了1024k,但仍然导致了stackoverflow。然而,尝试2048k工作,我认为这可能是解决方案。
编辑2:
虽然我不再使用此方法进行缩小,但更具体的是完整命令(我将其设置为shell别名),显示如何使用-Xss2048k参数:
java -Xss2048k -jar~ / Documents / RepHunter / Website \ Materials / Code / Third \ Party \ Libraries / YUI \ Compressor / yuicompressor-2.4.8.jar --type css -o
答案 0 :(得分:6)
正如我在编辑中发布的那样,解决方案是将参数添加到java命令中。线索是第5行“at”行的错误行,如下所示:
at com.yahoo.platform.yui.compressor.Bootstrap.main(Bootstrap.java:21)
Caused by: java.lang.StackOverflowError
看到问题是“StackOverlowError”;-)给出了尝试增加堆栈大小的建议。默认值为512k。我的第一次尝试1024k无法正常工作。然而,它增加到2048k确实有效,我没有进一步的问题。