scala - 使用 Build.scala 进行交叉编译时,如何为每个 Scala 版本设置不同的 scalacOptions?

标签 scala sbt cross-compiling

使用 Scala 2.10 和 SBT 0.13.2 构建时,我想要 -language:_ ,但这不被 Scala 2.9 识别。有一个关于设置不同的问题 scalacOptions用于交叉编译( Conditional scalacOptions with SBT ),但大约是 build.sbt .我正在使用 Build.scala因为我正在做一个多项目构建。

我试过这个:

  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"),
    ...
  )

但我收到一个错误:
[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

帮助?

最佳答案

在 SBT 0.13+ 中,这将起作用:

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...
)

关于scala - 使用 Build.scala 进行交叉编译时,如何为每个 Scala 版本设置不同的 scalacOptions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27698586/

相关文章:

java - 从文件中读取存储为字符串的 map 对象

jenkins - Jenkins 中使用 sbt 的 Nexus 凭证

sbt - 如何在 SBT 中仅为测试配置设置 Java 选项?

android - "/system/bin/linker: No such file or directory"尝试编译 TensorFlow 时出错

Scala reduceLeft : 0. asInstanceOf[B]

scala - 给定列表中每个第 n 项的列表

mongodb - java.lang.NoSuchFieldException : handle Embedded MongoDB with play framework 异常

java - 获取 sbt 插件时为 “PKIX path building failed” 和 “unable to find valid certification path to requested target”

c++ - g++ libc.so 绝对路径交叉编译错误

opencv - 如何使用 ffmpeg 交叉编译 OpenCV