2015-12-16 42 views
20

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 ...], ben

https://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.

+0

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

+0

@soong: her ikisi de build.sbt dosyasında belirtilen 2.11.7 değerine sahiptir. –

+0

@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

cevap

16

Bunu çözdüm. Bir keresinde -d bayrağı, SBT'nin hangi ayarları kullandığını söyleyeceğini bildikten sonra, SBT_OPTS ortam değişkenimdeki değerlerin diğer, daha düşük ayarlar tarafından gizlendiğini gördüm. Bunlar nereden geliyordu? JAVA_OPTS env değişkenimden! Onları daha erken fark etmeliydim, ama şimdi bu Java seçeneklerini saklıyorum ve 0TGT-spesifik ayarları benim/usr/local/etc/sbtopts dosyasına ekleyerek biraz garip bir format kullanarak onları geçersiz kılabiliyorum. değerler Projemde başarıyla sbt compile çalıştırmak başardı gösterilen kullanma

-J-Xmx2G 
-J-Xss2M 

.

Umarım birisi bunu yararlı bulur.

+0

Bunu çalıştırırsam: sbt -Pyarn -pHadoop 2.7 derlemesi -J-Xss2M Aldığım: Java HotSpot (TM) İstemci VM uyarısı: MaxPermSize seçeneği yoksayılıyor = 256m; destek wa s 8.0 içinde kaldırıldı - Herhangi bir fikir? – cs0815

+0

Yükseltme şifresi ve uyarı söner. –

İlgili konular