2014-04-26 6 views
14

Я пытаюсь скомпилировать свой проект в Scala 2.10 и 2.11, чтобы я мог выпускать версии для обе версии, Scala, но каждый раз, когда я пытаюсь сделать это он не со следующим сообщением:Попытка перекрестного скомпилировать проект для Scala 2.11 с ошибкой при загрузке объекта Object, Missing dependency scala в зеркале компилятора ''

#(04/26/[email protected] 7:40)([email protected]):~/projects/scala/[email protected]✔ 
    sbt compile 
[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/) 
[info] Compiling 61 Scala sources and 1 Java source to /Users/mauricio/projects/scala/postgresql-netty/db-async-common/target/scala-2.11/classes... 
[error] error while loading Object, Missing dependency 'object scala in compiler mirror', required by /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home/jre/lib/rt.jar(java/lang/Object.class) 
scala.reflect.internal.MissingRequirementError: object scala in compiler mirror not found. 
    at scala.reflect.internal.MissingRequirementError$.signal(MissingRequirementError.scala:17) 
    at scala.reflect.internal.MissingRequirementError$.notFound(MissingRequirementError.scala:18) 
    at scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:53) 
    at scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:66) 
    at scala.reflect.internal.Mirrors$RootsBase.getPackage(Mirrors.scala:173) 
    at scala.reflect.internal.Definitions$DefinitionsClass.ScalaPackage$lzycompute(Definitions.scala:161) 
    at scala.reflect.internal.Definitions$DefinitionsClass.ScalaPackage(Definitions.scala:161) 
    at scala.reflect.internal.Definitions$DefinitionsClass.ScalaPackageClass$lzycompute(Definitions.scala:162) 
    at scala.reflect.internal.Definitions$DefinitionsClass.ScalaPackageClass(Definitions.scala:162) 
    at scala.reflect.internal.Definitions$DefinitionsClass.init(Definitions.scala:1375) 
    at scala.tools.nsc.Global$Run.<init>(Global.scala:1278) 
    at xsbt.CachedCompiler0$$anon$2.<init>(CompilerInterface.scala:113) 
    at xsbt.CachedCompiler0.run(CompilerInterface.scala:113) 
    at xsbt.CachedCompiler0.run(CompilerInterface.scala:99) 
    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:606) 
    at sbt.compiler.AnalyzingCompiler.call(AnalyzingCompiler.scala:102) 
    at sbt.compiler.AnalyzingCompiler.compile(AnalyzingCompiler.scala:48) 
    at sbt.compiler.AnalyzingCompiler.compile(AnalyzingCompiler.scala:41) 
    at sbt.compiler.AggressiveCompile$$anonfun$3$$anonfun$compileScala$1$1.apply$mcV$sp(AggressiveCompile.scala:99) 
    at sbt.compiler.AggressiveCompile$$anonfun$3$$anonfun$compileScala$1$1.apply(AggressiveCompile.scala:99) 
    at sbt.compiler.AggressiveCompile$$anonfun$3$$anonfun$compileScala$1$1.apply(AggressiveCompile.scala:99) 
    at sbt.compiler.AggressiveCompile.sbt$compiler$AggressiveCompile$$timed(AggressiveCompile.scala:166) 
    at sbt.compiler.AggressiveCompile$$anonfun$3.compileScala$1(AggressiveCompile.scala:98) 
    at sbt.compiler.AggressiveCompile$$anonfun$3.apply(AggressiveCompile.scala:143) 
    at sbt.compiler.AggressiveCompile$$anonfun$3.apply(AggressiveCompile.scala:87) 
    at sbt.inc.IncrementalCompile$$anonfun$doCompile$1.apply(Compile.scala:39) 
    at sbt.inc.IncrementalCompile$$anonfun$doCompile$1.apply(Compile.scala:37) 
    at sbt.inc.IncrementalCommon.cycle(Incremental.scala:99) 
    at sbt.inc.Incremental$$anonfun$1.apply(Incremental.scala:38) 
    at sbt.inc.Incremental$$anonfun$1.apply(Incremental.scala:37) 
    at sbt.inc.Incremental$.manageClassfiles(Incremental.scala:65) 
    at sbt.inc.Incremental$.compile(Incremental.scala:37) 
    at sbt.inc.IncrementalCompile$.apply(Compile.scala:27) 
    at sbt.compiler.AggressiveCompile.compile2(AggressiveCompile.scala:157) 
    at sbt.compiler.AggressiveCompile.compile1(AggressiveCompile.scala:71) 
    at sbt.compiler.AggressiveCompile.apply(AggressiveCompile.scala:46) 
    at sbt.Compiler$.apply(Compiler.scala:75) 
    at sbt.Compiler$.apply(Compiler.scala:66) 
    at sbt.Defaults$.sbt$Defaults$$compileTaskImpl(Defaults.scala:743) 
    at sbt.Defaults$$anonfun$compileTask$1.apply(Defaults.scala:735) 
    at sbt.Defaults$$anonfun$compileTask$1.apply(Defaults.scala:735) 
    at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47) 
    at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:42) 
    at sbt.std.Transform$$anon$4.work(System.scala:64) 
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237) 
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237) 
    at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18) 
    at sbt.Execute.work(Execute.scala:244) 
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237) 
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237) 
    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.run(FutureTask.java:262) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:744) 
[error] (db-async-common/compile:compile) scala.reflect.internal.MissingRequirementError: object scala in compiler mirror not found. 
[error] Total time: 2 s, completed Apr 26, 2014 7:43:49 PM 

Мой файл сборки выглядит следующим образом:

import sbt._ 
import Keys._ 

object ProjectBuild extends Build { 

    val commonName = "db-async-common" 
    val postgresqlName = "postgresql-async" 
    val mysqlName = "mysql-async" 

    lazy val root = Project(
    id = "db-async-base", 
    base = file("."), 
    settings = Configuration.baseSettings, 
    aggregate = Seq(common, postgresql, mysql) 
) 

    lazy val common = Project(
    id = commonName, 
    base = file(commonName), 
    settings = Configuration.baseSettings ++ Seq(
     name := commonName, 
     libraryDependencies := Configuration.commonDependencies 
    ) 
) 

    lazy val postgresql = Project(
    id = postgresqlName, 
    base = file(postgresqlName), 
    settings = Configuration.baseSettings ++ Seq(
     name := postgresqlName, 
     libraryDependencies ++= Configuration.implementationDependencies 
    ) 
) aggregate (common) dependsOn (common) 

    lazy val mysql = Project(
    id = mysqlName, 
    base = file(mysqlName), 
    settings = Configuration.baseSettings ++ Seq(
     name := mysqlName, 
     libraryDependencies ++= Configuration.implementationDependencies 
    ) 
) aggregate (common) dependsOn (common) 

} 

object Configuration { 

    val commonVersion = "0.2.13" 
    val projectScalaVersion = "2.11.0" 

    val specs2Dependency = "org.specs2" %% "specs2" % "2.3.11" % "test" 
    val logbackDependency = "ch.qos.logback" % "logback-classic" % "1.0.13" % "test" 

    val commonDependencies = Seq(
    "org.slf4j" % "slf4j-api" % "1.7.5", 
    "joda-time" % "joda-time" % "2.3", 
    "org.joda" % "joda-convert" % "1.5", 
    "io.netty" % "netty-all" % "4.0.18.Final", 
    "org.javassist" % "javassist" % "3.18.1-GA", 
    specs2Dependency, 
    logbackDependency 
) 

    val implementationDependencies = Seq(
    specs2Dependency, 
    logbackDependency 
) 

    val baseSettings = Defaults.defaultSettings ++ Seq(
    scalacOptions := 
     Opts.compile.encoding("UTF8") 
     :+ Opts.compile.deprecation 
     :+ Opts.compile.unchecked 
     :+ "-feature" 
    , 
    scalacOptions in doc := Seq("-doc-external-doc:scala=http://www.scala-lang.org/archives/downloads/distrib/files/nightly/docs/library/"), 
    scalaVersion := projectScalaVersion, 
    crossScalaVersions := Seq(projectScalaVersion, "2.10.4"), 
    javacOptions := Seq("-source", "1.6", "-target", "1.6", "-encoding", "UTF8"), 
    organization := "com.github.mauricio", 
    version := commonVersion, 
    parallelExecution := false, 
    publishArtifact in Test := false, 
    publishMavenStyle := true, 
    pomIncludeRepository := { 
     _ => false 
    }, 
    publishTo <<= version { 
     v: String => 
     val nexus = "https://oss.sonatype.org/" 
     if (v.trim.endsWith("SNAPSHOT")) 
      Some("snapshots" at nexus + "content/repositories/snapshots") 
     else 
      Some("releases" at nexus + "service/local/staging/deploy/maven2") 
    }, 
    pomExtra := (
     <url>https://github.com/mauricio/postgresql-async</url> 
     <licenses> 
      <license> 
      <name>APACHE-2.0</name> 
      <url>http://www.apache.org/licenses/LICENSE-2.0</url> 
      <distribution>repo</distribution> 
      </license> 
     </licenses> 
     <scm> 
      <url>[email protected]:mauricio/postgresql-netty.git</url> 
      <connection>scm:git:[email protected]:mauricio/postgresql-netty.git</connection> 
     </scm> 
     <developers> 
      <developer> 
      <id>mauricio</id> 
      <name>Maurício Linhares</name> 
      <url>https://github.com/mauricio</url> 
      </developer> 
     </developers> 
    ) 
) 

} 

И если вы хотите, чтобы вытащить источник чтобы проверить это at this branch on Github.

Любая информация о попытке исправить это будет очень полезна.

ответ

15

Проблема очень проста, в вашем Build.scala, вы сделали почти все в порядке, но в достоянию проекта вы переопределили значение по умолчанию commonDependencies. По умолчанию он содержит зависимость от scala-библиотеки.

Этот фрагмент кода

lazy val common = Project(
    id = commonName, 
    base = file(commonName), 
    settings = Configuration.baseSettings ++ Seq(
     name := commonName, 
     libraryDependencies := Configuration.commonDependencies // #1 
    ) 
) 

на элемент, помеченный как #1 должен иметь

libraryDependencies ++= Configuration.commonDependencies 

Пс. Я отправил вам запрос с исправлением.

+0

Спасибо, я проверю это и вернусь сюда! –

+0

@ MaurícioLinhares любые новости по этому поводу - это помогло? – lpiepiora

+0

Теперь он строит, но когда я запускаю 'sbt publish-local', он только публикует версию 2.10, не строит 2.11. –

3

Я думаю, что вы ответили, прежде чем вопросы Multimodule project build with SBT breaks with weird error

В этой сборке добавьте строку "org.scala-lang" % "scala-library" % projectScalaVersion,:

val commonDependencies = Seq(
    .. 
    "org.joda" % "joda-convert" % "1.5", 
    "org.scala-lang" % "scala-library" % projectScalaVersion, 
    "io.netty" % "netty-all" % "4.0.18.Final", 
    ... 
) 
+0

Я проверил обе ветви и в текущем ' "org.scala-языки" % "библиотека лестницу" % projectScalaVersion 'отсутствует. Я попытался построить эту линию с успехом. –

+0

Я разветвил и добавил строку для сборки: [postgresql-async] (https://github.com/ajozwik/postgresql-async/tree/scala-2.11) –

2

В Build.scala Я хотел бы добавить autoScalaLibrary := true:

lazy val common = Project(
    id = commonName, 
    base = file(commonName), 
    settings = Configuration.baseSettings ++ Seq(
     ... 
     autoScalaLibrary := true, 
     ... 
    ) 
) 
3

Я получаю эту ошибку при попытке использовать Oracle Java-JVM на Ubuntu с SBT. Однако использование Java 8 jvm сработало для меня.

+0

Ha! Исправлено для меня – madbitloman

0

Эта проблема была решена для меня при использовании intellij, закрывая проект и реимпортируя его, и выбрав sbt в качестве системы сборки в настройках.

Почему, почему я выбрал SBT ?? Теперь я застрял в очень хрупкой системе сборки. Слава богу, что по крайней мере intellij делает все правильно.

версия SBT: 0.13.15

версия Scala: 2.12.1

 Смежные вопросы

  • Нет связанных вопросов^_^