加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 19:15:03 所属栏目:安全 来源:网络整理
导读:使用 Scala 2.10和SBT 0.13.2构建时,我希望使用-language:_,但Scala 2.9无法识别.关于为交叉编译设置不同的scalacOptions( Conditional scalacOptions with SBT)有一个问题,但它是关于build.sbt的.我正在使用Build.scala,因为我正在进行多项目构建. 我试过
使用 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","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...
)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读