【问题标题】:Conditional scalacOptions with SBT带有 SBT 的条件 scalacOptions
【发布时间】:2012-09-27 16:43:01
【问题描述】:

我正在使用 SBT 为 Scala 2.8、2.9 和(希望)2.10 交叉构建的项目。我想在仅使用 2.10 编译时添加 -feature 选项。

也就是说,当我使用小于 2.10.0 的版本进行编译时,我想将编译器选项设置为:

scalacOptions ++= Seq( "-deprecation", "-unchecked" )

当使用大于或等于 2.10.0 的版本进行编译时:

scalacOptions ++= Seq( "-deprecation", "-unchecked", "-feature" )

有没有办法做到这一点?

【问题讨论】:

标签: scala sbt scala-2.10


【解决方案1】:

我发现这是一种快速简洁的方法:

scalaVersion := "2.10.0"

crossScalaVersions := "2.9.2" :: "2.10.0" :: Nil

scalacOptions <<= scalaVersion map { v: String =>
  val default = "-deprecation" :: "-unchecked" :: Nil
  if (v.startsWith("2.9.")) default else default :+ "-feature"            
}

【讨论】:

    【解决方案2】:

    在交叉构建时,scalaVersion 会反映您的项目当前构建的版本。所以取决于 scalaVersion 应该可以解决问题:

    val scalaVersionRegex = "(\\d+)\\.(\\d+).*".r
    ...
    scalacOptions <++= scalaVersion { sv =>
      sv match {
        case scalaVersionRegex(major, minor) if major.toInt > 2 || (major == "2" && minor.toInt >= 10) =>
          Seq( "-deprecation", "-unchecked", "-feature" )
        case _ => Seq( "-deprecation", "-unchecked" )
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-12
      • 2016-10-04
      • 2021-11-22
      • 1970-01-01
      • 1970-01-01
      • 2018-06-25
      • 2015-08-26
      • 1970-01-01
      相关资源
      最近更新 更多