StackOverflowError 与 Maven 3.3.9、Java 8 和 Scala 2.12
StackOverflowError with Maven 3.3.9, Java 8 and Scala 2.12
当我尝试使用 mvn package
和 Java 1.8.0_112.
编译和打包我的代码时,我得到一个 java.lang.WhosebugError
我的代码在 Java 7.
下编译得很好
我尝试设置 JAVA_OPTS=-Xss512m
并尝试使用 1G,但总是出现相同的错误。
代码是用 Scala 编写的,我在 pom.xml:
中使用这些版本
<scala.version>2.10.4</scala.version>
<spark.version>1.6.0-cdh5.7.1</spark.version>
<hbase.version>1.2.0-cdh5.7.1</hbase.version>
<kafka.version>0.9.0.0</kafka.version>
<jackson.version>2.7.2</jackson.version>
<iodadm.version>05.4.1</iodadm.version>
我也尝试使用 Scala 版本 2.12.0,因为 2.10.x 与 Java 8.
不兼容
部分错误堆栈:
INFO] java.lang.reflect.InvocationTargetException
[INFO] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[INFO] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[INFO] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[INFO] at java.lang.reflect.Method.invoke(Method.java:498)
[INFO] at scala_maven_executions.MainHelper.runMain(MainHelper.java:164)
[INFO] at scala_maven_executions.MainWithArgsInFile.main(MainWithArgsInFile.java:26)
[ERROR] Caused by: java.lang.WhosebugError
[INFO] at java.security.AccessController.doPrivileged(Native Method)
[INFO] at java.io.PrintWriter.<init>(PrintWriter.java:116)
[INFO] at java.io.PrintWriter.<init>(PrintWriter.java:100)
[INFO] at scala.reflect.api.Printers$class.render(Printers.scala:168)
[INFO] at scala.reflect.api.Universe.render(Universe.scala:59)
[INFO] at scala.reflect.api.Printers$class.show(Printers.scala:190)
还有一点,Whosebug错误一般是运行时执行错误,怎么可能在编译的时候得到呢?
[已添加 1] 我发现这个错误是由于 scala 类 至少有 150 个属性
[新增2]抛出这个错误的函数是equals函数,我是这样开发的:
def equals(other:MyClass):Boolean = {
this.P1 == other.P1 &&
this.P2 == other.P2 &&
... ~ 180 similar line ...
this.P180 == other.P180
}
谢谢。
我把逻辑运算拆分成多个解决了这个问题
def equals(other:MyClass):Boolean = {
Boolean bool1=this.P1 == other.P1 &&
this.P2 == other.P2 &&
...
this.P100 == other.P100
Boolean bool2=this.P101 == other.P101 &&
this.P102 == other.P102 &&
...
this.P200 == other.P200
bool1 && bool2
}
解决这类问题的方法是逐步编译代码,直到找到抛出错误的代码块
我希望这会对某人有所帮助
当我尝试使用 mvn package
和 Java 1.8.0_112.
java.lang.WhosebugError
我的代码在 Java 7.
下编译得很好我尝试设置 JAVA_OPTS=-Xss512m
并尝试使用 1G,但总是出现相同的错误。
代码是用 Scala 编写的,我在 pom.xml:
中使用这些版本 <scala.version>2.10.4</scala.version>
<spark.version>1.6.0-cdh5.7.1</spark.version>
<hbase.version>1.2.0-cdh5.7.1</hbase.version>
<kafka.version>0.9.0.0</kafka.version>
<jackson.version>2.7.2</jackson.version>
<iodadm.version>05.4.1</iodadm.version>
我也尝试使用 Scala 版本 2.12.0,因为 2.10.x 与 Java 8.
不兼容部分错误堆栈:
INFO] java.lang.reflect.InvocationTargetException
[INFO] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[INFO] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[INFO] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[INFO] at java.lang.reflect.Method.invoke(Method.java:498)
[INFO] at scala_maven_executions.MainHelper.runMain(MainHelper.java:164)
[INFO] at scala_maven_executions.MainWithArgsInFile.main(MainWithArgsInFile.java:26)
[ERROR] Caused by: java.lang.WhosebugError
[INFO] at java.security.AccessController.doPrivileged(Native Method)
[INFO] at java.io.PrintWriter.<init>(PrintWriter.java:116)
[INFO] at java.io.PrintWriter.<init>(PrintWriter.java:100)
[INFO] at scala.reflect.api.Printers$class.render(Printers.scala:168)
[INFO] at scala.reflect.api.Universe.render(Universe.scala:59)
[INFO] at scala.reflect.api.Printers$class.show(Printers.scala:190)
还有一点,Whosebug错误一般是运行时执行错误,怎么可能在编译的时候得到呢?
[已添加 1] 我发现这个错误是由于 scala 类 至少有 150 个属性
[新增2]抛出这个错误的函数是equals函数,我是这样开发的:
def equals(other:MyClass):Boolean = {
this.P1 == other.P1 &&
this.P2 == other.P2 &&
... ~ 180 similar line ...
this.P180 == other.P180
}
谢谢。
我把逻辑运算拆分成多个解决了这个问题
def equals(other:MyClass):Boolean = {
Boolean bool1=this.P1 == other.P1 &&
this.P2 == other.P2 &&
...
this.P100 == other.P100
Boolean bool2=this.P101 == other.P101 &&
this.P102 == other.P102 &&
...
this.P200 == other.P200
bool1 && bool2
}
解决这类问题的方法是逐步编译代码,直到找到抛出错误的代码块
我希望这会对某人有所帮助