我有一个相当简单的RESTEasy客户端应用程序,我试图使用Maven Shade和Assembly插件编译成一个自包含的JAR文件。 Maven将成功打包应用程序,它将启动OK,但最终我收到以下错误:
Exception in thread "main" java.lang.StackOverflowError
at java.util.regex.ASCII.getType(ASCII.java:199)
at java.util.regex.ASCII.isType(ASCII.java:203)
at java.util.regex.Pattern$Ctype.isSatisfiedBy(Pattern.java:3832)
at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3715)
at java.util.regex.Pattern$Curly.match(Pattern.java:4125)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
at java.util.regex.Pattern$Branch.match(Pattern.java:4502)
at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3715)
at java.util.regex.Pattern$Start.match(Pattern.java:3408)
at java.util.regex.Matcher.search(Matcher.java:1199)
at java.util.regex.Matcher.find(Matcher.java:618)
at java.util.Formatter.parse(Formatter.java:2517)
at java.util.Formatter.format(Formatter.java:2469)
at java.util.Formatter.format(Formatter.java:2423)
at java.lang.String.format(String.java:2845)
at org.jboss.resteasy.client.core.BaseClientResponse.readFrom(BaseClientResponse.java:384)
at org.jboss.resteasy.client.core.BaseClientResponse.getEntity(BaseClientResponse.java:346)
at org.jboss.resteasy.client.core.BaseClientResponse.getEntity(BaseClientResponse.java:319)
at org.jboss.resteasy.client.core.BaseClientResponse.getEntity(BaseClientResponse.java:442)
at org.jboss.resteasy.client.core.BaseClientResponse.copyFromError(BaseClientResponse.java:94)
at org.jboss.resteasy.client.ClientResponseFailure.<init>(ClientResponseFailure.java:32)
at org.jboss.resteasy.client.core.BaseClientResponse.createResponseFailure(BaseClientResponse.java:488)
at org.jboss.resteasy.client.core.BaseClientResponse.createResponseFailure(BaseClientResponse.java:479)
org.jboss.resteasy.client.core.BaseClientResponse.readFrom(BaseClientResponse.java:384)之后的调用堆栈一遍又一遍地重复,直到内存耗尽。
我的代码不是问题。使用Maven dependency plugin打包时,应用程序运行正常。
我的代码确实依赖于正则表达式命名组(依赖于Java 1.7),但我可以确认Maven和应用程序本身是使用正确的JDK编译和运行的。
任何人都可以解释一个自包含的JAR文件如何导致像这样的堆栈溢出。