scala sbt multi-module

¿Por qué falla la compilación sbt con "MissingRequirementError: object scala.runtime in compiler mirror no encontrado"?



multi-module (3)

Añadiendo scala-library como una dependencia de proyecto:

"org.scala-lang" % "scala-library" % "2.10.1"

Hizo el truco. Todavía no estoy seguro de por qué esto es necesario ahora, pero no lo era antes.

Tengo esta configuración de compilación de varios módulos en la que estoy tratando de trabajar, pero cada vez que intento compilar el proyecto falla con el siguiente error:

➜ postgresql-netty git:(multi-module) sbt clean compile [info] Loading global plugins from /Users/mauricio/.sbt/plugins [info] Loading project definition from /Users/mauricio/projects/scala/postgresql-netty/project [info] Set current project to db-async-base (in build file:/Users/mauricio/projects/scala/postgresql-netty/) [success] Total time: 0 s, completed May 1, 2013 11:18:29 PM [info] Updating {file:/Users/mauricio/projects/scala/postgresql-netty/}db-async-common... [info] Updating {file:/Users/mauricio/projects/scala/postgresql-netty/}db-async-base... [info] Resolving org.specs2#scalaz-core_2.10;7.0.0 ... [info] Done updating. [info] Resolving org.scala-lang#scala-library;2.10.1 ... [info] Done updating. [info] Updating {file:/Users/mauricio/projects/scala/postgresql-netty/}postgresql-async... [info] Resolving ch.qos.logback#logback-classic;1.0.9 ... [info] Compiling 16 Scala sources to /Users/mauricio/projects/scala/postgresql-netty/db-async-common/target/scala-2.10/classes... [info] Resolving org.specs2#scalaz-core_2.10;7.0.0 ... [info] Done updating. scala.reflect.internal.MissingRequirementError: object scala.runtime in compiler mirror not found. at scala.reflect.internal.MissingRequirementError$.signal(MissingRequirementError.scala:16) at scala.reflect.internal.MissingRequirementError$.notFound(MissingRequirementError.scala:17) at scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:48) at scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:40) at scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:61) at scala.reflect.internal.Mirrors$RootsBase.getPackage(Mirrors.scala:172) at scala.reflect.internal.Mirrors$RootsBase.getRequiredPackage(Mirrors.scala:175) at scala.reflect.internal.Definitions$DefinitionsClass.RuntimePackage$lzycompute(Definitions.scala:181) at scala.reflect.internal.Definitions$DefinitionsClass.RuntimePackage(Definitions.scala:181) at scala.reflect.internal.Definitions$DefinitionsClass.RuntimePackageClass$lzycompute(Definitions.scala:182) at scala.reflect.internal.Definitions$DefinitionsClass.RuntimePackageClass(Definitions.scala:182) at scala.reflect.internal.Definitions$DefinitionsClass.AnnotationDefaultAttr$lzycompute(Definitions.scala:1015) at scala.reflect.internal.Definitions$DefinitionsClass.AnnotationDefaultAttr(Definitions.scala:1014) at scala.reflect.internal.Definitions$DefinitionsClass.syntheticCoreClasses$lzycompute(Definitions.scala:1144) at scala.reflect.internal.Definitions$DefinitionsClass.syntheticCoreClasses(Definitions.scala:1143) at scala.reflect.internal.Definitions$DefinitionsClass.symbolsNotPresentInBytecode$lzycompute(Definitions.scala:1187) at scala.reflect.internal.Definitions$DefinitionsClass.symbolsNotPresentInBytecode(Definitions.scala:1187) at scala.reflect.internal.Definitions$DefinitionsClass.init(Definitions.scala:1252) at scala.tools.nsc.Global$Run.<init>(Global.scala:1289) at xsbt.CachedCompiler0.run(CompilerInterface.scala:87) at xsbt.CachedCompiler0.run(CompilerInterface.scala:72) at xsbt.CompilerInterface.run(CompilerInterface.scala:27) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at sbt.compiler.AnalyzingCompiler.call(AnalyzingCompiler.scala:73) at sbt.compiler.AnalyzingCompiler.compile(AnalyzingCompiler.scala:35) at sbt.compiler.AnalyzingCompiler.compile(AnalyzingCompiler.scala:29) at sbt.compiler.AggressiveCompile$$anonfun$4$$anonfun$compileScala$1$1.apply$mcV$sp(AggressiveCompile.scala:71) at sbt.compiler.AggressiveCompile$$anonfun$4$$anonfun$compileScala$1$1.apply(AggressiveCompile.scala:71) at sbt.compiler.AggressiveCompile$$anonfun$4$$anonfun$compileScala$1$1.apply(AggressiveCompile.scala:71) at sbt.compiler.AggressiveCompile.sbt$compiler$AggressiveCompile$$timed(AggressiveCompile.scala:101) at sbt.compiler.AggressiveCompile$$anonfun$4.compileScala$1(AggressiveCompile.scala:70) at sbt.compiler.AggressiveCompile$$anonfun$4.apply(AggressiveCompile.scala:88) at sbt.compiler.AggressiveCompile$$anonfun$4.apply(AggressiveCompile.scala:60) at sbt.inc.IncrementalCompile$$anonfun$doCompile$1.apply(Compile.scala:24) at sbt.inc.IncrementalCompile$$anonfun$doCompile$1.apply(Compile.scala:22) at sbt.inc.Incremental$.cycle(Incremental.scala:52) at sbt.inc.Incremental$.compile(Incremental.scala:29) at sbt.inc.IncrementalCompile$.apply(Compile.scala:20) at sbt.compiler.AggressiveCompile.compile2(AggressiveCompile.scala:96) at sbt.compiler.AggressiveCompile.compile1(AggressiveCompile.scala:44) at sbt.compiler.AggressiveCompile.apply(AggressiveCompile.scala:31) at sbt.Compiler$.apply(Compiler.scala:79) at sbt.Defaults$$anonfun$compileTask$1.apply(Defaults.scala:574) at sbt.Defaults$$anonfun$compileTask$1.apply(Defaults.scala:574) at sbt.Scoped$$anonfun$hf2$1.apply(Structure.scala:578) at sbt.Scoped$$anonfun$hf2$1.apply(Structure.scala:578) at scala.Function1$$anonfun$compose$1.apply(Function1.scala:49) at sbt.Scoped$Reduced$$anonfun$combine$1$$anonfun$apply$12.apply(Structure.scala:311) at sbt.Scoped$Reduced$$anonfun$combine$1$$anonfun$apply$12.apply(Structure.scala:311) at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:41) at sbt.std.Transform$$anon$5.work(System.scala:71) at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:232) at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:232) at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18) at sbt.Execute.work(Execute.scala:238) at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:232) at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:232) at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:160) at sbt.CompletionService$$anon$2.call(CompletionService.scala:30) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) at java.util.concurrent.FutureTask.run(FutureTask.java:166) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) at java.util.concurrent.FutureTask.run(FutureTask.java:166) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:722) [error] (db-async-common/compile:compile) scala.reflect.internal.MissingRequirementError: object scala.runtime in compiler mirror not found. [error] Total time: 4 s, completed May 1, 2013 11:18:33 PM

¿Alguna idea de qué es esto y cómo puedo solucionarlo?


El problema es cuando borras todas las dependencias del proyecto mientras configuras las tuyas, es decir, usando := not ++= o += para agregar dependencias a libraryDependencies en una definición de compilación, por ejemplo, en build.sbt :

libraryDependencies := Dependencies.microservice

Con := todas las dependencias actuales que sbt establece por adelantado en libraryDependencies se borran y las únicas dependencias disponibles son estas de Dependencies.microservice (como en el ejemplo anterior).

Agregar "org.scala-lang" % "scala-library" % "2.10.1" (o la versión de scalaVersion que use) es solo una solución para eliminar la scalaVersion de las scalaVersion de la scalaVersion que ya están correctamente inicializadas.

Es fácil de reproducir con la siguiente definición de compilación - build.sbt :

libraryDependencies := Seq()

Intentar compilar los resultados de los archivos Scala en el error - note show libraryDependencies :

➜ clear-library-dependencies xsbt JAVA_HOME=/Library/Java/JavaVirtualMachines/java8/Contents/Home SBT_OPTS= -Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -Dfile.encoding=UTF-8 [info] Loading global plugins from /Users/jacek/.sbt/0.13/plugins [info] Updating {file:/Users/jacek/.sbt/0.13/plugins/}global-plugins... [info] Resolving org.fusesource.jansi#jansi;1.4 ... [info] Done updating. [info] Set current project to clear-library-dependencies (in build file:/Users/jacek/dev/sandbox/clear-library-dependencies/) [clear-library-dependencies]> show libraryDependencies [info] List() [clear-library-dependencies]> compile [info] Updating {file:/Users/jacek/dev/sandbox/clear-library-dependencies/}clear-library-dependencies... [info] Resolving org.fusesource.jansi#jansi;1.4 ... [info] Done updating. [info] Compiling 1 Scala source to /Users/jacek/dev/sandbox/clear-library-dependencies/target/scala-2.10/classes... [trace] Stack trace suppressed: run last compile:compileIncremental for the full output. [error] (compile:compileIncremental) scala.reflect.internal.MissingRequirementError: object scala.runtime in compiler mirror not found. [error] Total time: 0 s, completed Feb 3, 2015 10:36:08 PM

Cambie la construcción a lo siguiente (no se puede usar, pero solo para mostrar el punto):

libraryDependencies ++= Seq()

El resultado será el siguiente:

[clear-library-dependencies]> reload [info] Loading global plugins from /Users/jacek/.sbt/0.13/plugins [info] Set current project to clear-library-dependencies (in build file:/Users/jacek/dev/sandbox/clear-library-dependencies/) [clear-library-dependencies]> show libraryDependencies [info] List(org.scala-lang:scala-library:2.10.4) [clear-library-dependencies]> compile [info] Updating {file:/Users/jacek/dev/sandbox/clear-library-dependencies/}clear-library-dependencies... [info] Resolving org.fusesource.jansi#jansi;1.4 ... [info] Done updating. [info] Compiling 1 Scala source to /Users/jacek/dev/sandbox/clear-library-dependencies/target/scala-2.10/classes... [success] Total time: 1 s, completed Feb 3, 2015 10:38:19 PM


Lo que terminó aliviando este error para mí fue degradar mi versión Java. Recientemente actualicé a Java 10, que parece tener problemas de compatibilidad con algunas versiones de scala (al menos tiene problemas con scala 2.12), por lo que pasar a Java 8 fue la solución.