私は数年前に存在していたScalaプロジェクトに取り組んでいますが、私にとっては新しくなっています。私の仕事は、Scala 2.9.3から2.11.7へ、その依存関係をアップグレードすることです。私はエラーと警告を過ぎてしまったが、私はSBTでプロジェクトを正常にコンパイルすることができない。私はいつも同じ場所でStackOverflowErrorを取得します。スタックトレースは次のようになりますが、詳細は、XSSの設定(現在は4Mが、24Mと高くしようとしている)で異なりますStackOverflowErrorでsbtコンパイルが失敗するのはなぜですか?
java.lang.StackOverflowError
at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:698)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5395)
at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$typedInternal(Typers.scala:5422)
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5369)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5373)
at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:5471)
at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:5479)
at scala.tools.nsc.transform.Erasure$Eraser.adaptMember(Erasure.scala:644)
at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:698)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5395)
at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$typedInternal(Typers.scala:5422)
SBT_OPTS次のようになります。
-Xmx2G -Xss4M -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled
私は「作る」ことができますプロジェクトはIntellijにうまくいき、他の人がGitHubから私の変更を引き出し、sbtでプロジェクトをコンパイルすることができるので、私のマシン(最近の16GB RAMのクアッドコアMacBook Pro)のローカルなようだ。他のScala/sbtプロジェクトはこのマシンで正常にコンパイルされます。ここで
は、他の関連する詳細は、以下のとおりです。
Scala version: 2.11.7
Java version: java version "1.8.0_66" (build 1.8.0_66-b17)
sbt version: 0.13.7 (have also tried 0.13.9)
私は完全にivy2キャッシュを再構築し、lib_managedディレクトリをクリアしました。 scala-compiler.jarのバージョンは、コードを正常にコンパイルできる1台以上のマシンで使用されているものと同じです。私は、brew remove sbt
経由で、〜/ .sbtディレクトリを手動で削除してから、brew install sbt
を使って、sbtをきれいに再インストールしました。
私はエラーが発生したときにコンパイルされているソースコードの行を分離しようとしませんでした。どこかで構成上の問題や依存関係の競合を探すのがより生産的であると私は考えていました。
さらなるトラブルシューティングのご提案をいただければ幸いです。
[追加...]それを追加すると便利かもしれは、実験として、私はhttps://github.com/scala/scalaからScalaの言語のソースコードをダウンロードしてsbt compile
にそれをしようと、次の非常に類似したエラーを得た:
java.lang.StackOverflowError
at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.outerValue(ExplicitOuter.scala:229)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:441)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:352)
at scala.reflect.internal.Trees$class.itransform(Trees.scala:1345)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:44)
at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.scala$reflect$internal$Trees$UnderConstructionTransformer$$super$transform(ExplicitOuter.scala:219)
at scala.reflect.internal.Trees$UnderConstructionTransformer$class.transform(Trees.scala:1693)
at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:291)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:459)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:352)
at scala.reflect.internal.Trees$class.itransform(Trees.scala:1347)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
ここに興味深いものがあります。 this postから、デバッグ情報の-dフラグを指定してsbtを起動する方法を知りました。だから、どこかで私のSBT_OPTSの設定が上書きされている
Kevins-MacBook-Pro:scala kdoherty$ sbt -d
[process_args] java_version = '1.8.0_66'
# Executing command line:
java
-Xmx2G
-Xss4M
-XX:+UseConcMarkSweepGC
-XX:+CMSClassUnloadingEnabled
-Xmx384m
-Xss512k
-XX:+UseCompressedOops
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
-jar
/usr/local/Cellar/sbt/0.13.9/libexec/sbt-launch.jar
は、(デフォルトで、私は推測する):次の出力を得ました。今私はそれらのデフォルトがどこから来ているのかを知る必要があります。
同じバージョンのスカラーコンパイラを使用しているとします。'scalac -version'が両方のコンピュータで同じことを返すか、両方のコンピュータが.sbtビルドファイルで定義された2.11.7を持っていることを意味しますか? – childofsoong
@soong:どちらもbuild.sbtファイルで2.11.7が指定されています。 –
@KevinDohertyこの他のコンピュータにインストールされているjavaのバージョンを知っていますか?そのJVMの設定は何ですか? – childofsoong