How to set different scalacOptions for Scala version when cross-compiling using Build.scala?

When building with Scala 2.10 and SBT 0.13.2, I want to have -language:_ , but this is not recognized by Scala 2.9. This raises the question of setting up different scalacOptions for cross-compiling ( Conditional scalacOptions with SBT ), but it's roughly build.sbt . I use Build.scala because I am doing a multi- Build.scala build.

I tried this:

  def scalacOptionsVersion(v: String) = { Seq( "-unchecked", "-deprecation", "-Xlint", "-Xfatal-warnings", "-Ywarn-dead-code", "-target:jvm-1.7", "-encoding", "UTF-8") ++ ( if (v.startsWith("2.9")) Seq() else Seq("-language:_")) } override val settings = super.settings ++ Seq( ..., scalaVersion := "2.10.4", scalacOptions <++= scalaVersion(scalacOptionsVersion), crossScalaVersions := Seq("2.9.2", "2.10.4", "2.11.4"), ... ) 

but I get an error:

 [error] /Users/benwing/devel/lemkit/scala/project/build.scala:29: type mismatch; [error] found : sbt.Def.Initialize[Equals] [error] required: sbt.Def.Initialize[sbt.Task[?]] [error] Note: Equals >: sbt.Task[?], but trait Initialize is invariant in type T. [error] You may wish to define T as -T instead. (SLS 4.5) [error] scalacOptions <++= scalaVersion(scalacOptionsVersion), [error] ^ [error] one error found 

reference

+6
source share
1 answer

In SBT 0.13+, this will work:

 def scalacOptionsVersion(scalaVersion: String) = { Seq( "-unchecked", "-deprecation", "-Xlint", "-Xfatal-warnings", "-Ywarn-dead-code", "-target:jvm-1.7", "-encoding", "UTF-8" ) ++ CrossVersion.partialVersion(scalaVersion) match { case Some((2, scalaMajor)) if scalaMajor == 9 => Nil case _ => Seq("-language:_") } } val appSettings = Seq( scalacOptions := scalacOptionsVersion(scalaVersion.value) // other settings... ) 
+10
source

Source: https://habr.com/ru/post/980284/


All Articles