2017-01-13 7 views
-2

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 
} 

ありがとうございます。

+2

'' 'StackOverflowError'''についてもっと詳しく教えてください。いくつかの再現可能なサンプルコードは素晴らしいでしょう。そうでなければ、質問は広すぎるし、誰かが貴重な答えを与えることができるかどうかは疑問だ。 – h3nrik

+0

BTW: '' 'StackOverflowError'''は、通常、例えば次のような場合に発生します。どこかで無限の再帰。その場合、スタックサイズを増やすことは重要ではありません。根本原因を修正するまで、常に同じエラーが発生します。 – h3nrik

+0

@ h3nrik:アドバイスありがとうございます。プロジェクトは大きく、コードのどの部分がこのエラーを投げかけているのか分かりません。さらに、コードはJava 7でうまくいきます。私はエラースタックの一部で答えを編集しました – bbary

答えて

0

I問題のこのタイプを解決するためのアプローチは、私はエラーを

をスローするコードブロックを見つけるまで徐々にコードをコンパイルすることで、多くの

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 
} 

で論理演算を分割して問題を解決しこれが誰かを助けることを願っています

関連する問題