Birkaç yıldır var olan ama benim için yeni olan bir Scala projesi üzerinde çalışıyorum. Benim görevim, bağımlılıkları ile birlikte Scala 2.9.3'ten 2.11.7'ye yükseltmektir. Hataları ve uyarıları geçtim, ancak projeyi SBT'de başarılı bir şekilde derleyemiyorum. Her zaman bir StackOverflowError'ı hemen hemen aynı yere alırım.sbt derlemesi StackOverflowError ile neden başarısız oluyor?
-Xmx2G -Xss4M -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled
Ben 'yapmak' olabilir: StackTrace bu gibi görünüyor, ama ayrıntıları XSS ayara göre değişir (şu anda 4M, ama 24M gibi yüksek denedim):
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 şuna benzer proje Intellij'de başarılı oldu, diğerleri de değişiklikleri GitHub'dan alabilir ve projeyi sbt olarak derleyebilir, bu yüzden sorun makinem için yerel görünebilir (16GB RAM ile son dört çekirdekli Macbook Pro). Diğer Scala/sbt projeleri bu makinede benim için başarıyla tamamlandı. Tamamen ivy2 önbellek yeniden inşa edildi ve lib_managed dizini açtılar
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)
:
İşte diğer ilgili detaylar. Scala-compiler.jar sürümü, kodu başarılı bir şekilde derleyemeyecek en az bir makinede kullanılanla aynıdır. Temiz bir sbt (brew remove sbt
aracılığıyla, ~/.sbt dizininin el ile kaldırılması, daha sonra brew install sbt
) yaptım.
Hata oluştuğunda derlenen kaynak kod satırını yalıtmaya çalışmadım. Bir yerde bir yapılandırma sorunu veya bağımlılık çatışması aramak daha verimli olacağını düşündüm.
Sorun giderme ile ilgili önerileriniz için teşekkür ederiz. Bu bir deney olarak, eklemek yararlı olabilir
[Eklendi ...], benhttps://github.com/scala/scala den Scala dil kaynak kodunu indirip sbt compile
o çalışırken aşağıdaki çok benzer hata var :
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)
İşte ilginç bir şey. this post'dan, hata ayıklama bilgisi için bir -d bayrağıyla sbt başlatmayı öğrendim. Yani bir yerde benim SBT_OPTS ayarları geçersiz ediliyor
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
(varsayılan tarafından, sanırım): Aşağıdaki çıktıyı var. Şimdi bu varsayılanların nereden geldiğini bulmalıyım.
Aynı scala-derleyici sürümüne sahip olduğunuzu söylediğinizde.Bunu derleyebilen başka bir bilgisayar olarak jar, 'scalac -version' her iki bilgisayarda da aynı şeyi döndürdüğünü mi yoksa her iki bilgisayarın da .sbt derleme dosyasında tanımlanmış 2.11.7 olduğunu mu kastediyorsunuz? – childofsoong
@soong: her ikisi de build.sbt dosyasında belirtilen 2.11.7 değerine sahiptir. –
@KevinDoherty Bu bilgisayarda yüklü olan java sürümünü ve bunun için tüm JVM ayarlarının ne olduğunu biliyor musunuz? – childofsoong