Sbt项目与依赖库Scala二进制版本冲突问题求助
解决Scala版本冲突问题
嘿,别慌,这个问题我刚入门Scala的时候也碰到过,其实就是项目和依赖的Scala版本不兼容导致的~
问题根源
你的项目配置里scalaVersion设置的是2.12.4,但手动添加的三个Scala核心依赖(scala-compiler、scala-library、scala-reflect)用的是2.11.10。Scala的2.11和2.12系列是二进制不兼容的,sbt会严格检查这种版本冲突,所以就抛出了那个提示。另外,你的build.sbt最后还有个没写完的man,这也是语法错误,得一起修正。
解决方案
我给你两种可行的修正方式,选哪种看你的需求:
方式1:统一到2.12.4(推荐,更现代的版本)
直接把依赖的版本和项目保持一致,而且可以用scalaVersion.value自动同步,以后改版本只需要改一处就行。另外,scala-library其实sbt会自动帮你引入,不用手动添加,避免重复:
val managedLibs : Setting[_] = libraryDependencies ++= Seq( "org.scala-lang" % "scala-compiler" % scalaVersion.value withSources(), "org.scala-lang" % "scala-reflect" % scalaVersion.value withSources() ) lazy val root = (project in file(".")) .settings( name := "foo", organization := "bar", scalaVersion := "2.12.4", sourcesInBase := false, version := "0.1", managedLibs // 别忘了把这个依赖设置加到项目配置里 )
方式2:统一到2.11.10(如果你有必须用旧版本的理由)
把项目的Scala版本改成和依赖一致的2.11.10,同样用scalaVersion.value保持同步:
val managedLibs : Setting[_] = libraryDependencies ++= Seq( "org.scala-lang" % "scala-compiler" % scalaVersion.value withSources(), "org.scala-lang" % "scala-reflect" % scalaVersion.value withSources() ) lazy val root = (project in file(".")) .settings( name := "foo", organization := "bar", scalaVersion := "2.11.10", // 改成旧版本 sourcesInBase := false, version := "0.1", managedLibs )
小提示
以后添加Scala相关的依赖时,尽量用scalaVersion.value来指定版本,这样就能避免手动同步版本带来的冲突问题啦~
内容的提问来源于stack exchange,提问作者Than21
相关产品推荐
相关产品推荐

