I'm trying to compile my project to Scala 2.10 and 2.11 so that I can release versions for both scala versions, but every time I try to do it it fails with the following message:
#( 04/26/14@ 7:40 )( mauricio@Mauricios-MacBook-Pro ):~/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
My build file looks like this:
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>
)
)
}
And if you'd like to pull the source to check it's at this branch on Github.
Any info on trying to fix this would be very helpful.
The problem is very simple, in your Build.scala
, you did almost all right, but in commons project you had overridden default commonDependencies
. By default it contains dependency to scala-library.
This piece of code
lazy val common = Project(
id = commonName,
base = file(commonName),
settings = Configuration.baseSettings ++ Seq(
name := commonName,
libraryDependencies := Configuration.commonDependencies // #1
)
)
at the element marked as #1
should have
libraryDependencies ++= Configuration.commonDependencies
Ps. I've sent you a pull request with the fix.