mvn package
とJava 1.8.0_112でコードをコンパイルしてパッケージ化しようとすると、java.lang.StackOverflowError
と表示されます。Maven 3.3.9、Java 8、Scala 2.12を使用したStackOverflowError
私のコードは、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>
2.10.xは、Java 8
と互換性がありませんので、私はScalaのバージョン2.12.0でも試してみましたエラー・スタックの一部:
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.StackOverflowError
[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)
もう一つは、stackoverflowのエラーは、コンパイル時にそれを得ることが可能であるか、通常はランタイム実行エラーですか?
私はこのエラーは、少なくとも150個の特性
とScalaのクラスによって引き起こされることを見出した[追加された1] [追加された2]このエラーをスローする関数である関数に等しく、私はこのようにそれを開発した:
def equals(other:MyClass):Boolean = {
this.P1 == other.P1 &&
this.P2 == other.P2 &&
... ~ 180 similar line ...
this.P180 == other.P180
}
ありがとうございます。
'' 'StackOverflowError'''についてもっと詳しく教えてください。いくつかの再現可能なサンプルコードは素晴らしいでしょう。そうでなければ、質問は広すぎるし、誰かが貴重な答えを与えることができるかどうかは疑問だ。 – h3nrik
BTW: '' 'StackOverflowError'''は、通常、例えば次のような場合に発生します。どこかで無限の再帰。その場合、スタックサイズを増やすことは重要ではありません。根本原因を修正するまで、常に同じエラーが発生します。 – h3nrik
@ h3nrik:アドバイスありがとうございます。プロジェクトは大きく、コードのどの部分がこのエラーを投げかけているのか分かりません。さらに、コードはJava 7でうまくいきます。私はエラースタックの一部で答えを編集しました – bbary