sbt任务/设置键的类型不匹配

时间:2017-10-27 10:45:33

标签: scala sbt type-mismatch

我正在关注sbt文档的教程,在本章:Defining a task that depends on other settings,有这样的例子:

lazy val root = (project in file("."))
  .settings(
    name := "Hello",
    organization := "com.example",
    scalaVersion := "2.12.3",
    version := "0.1.0-SNAPSHOT",
    scalacOptions := List("-encoding", "utf8", "-Xfatal-warnings", "-deprecation", "-unchecked"),
    scalacOptions := {
      val old = scalacOptions.value
      scalaBinaryVersion.value match {
        case "2.12" => old
        case _      => old filterNot (Set("-Xfatal-warnings", "-deprecation").apply)
      }
    }
  )
  

scalacOptions是一个任务键。假设它已被设置为某些值,但您想过滤掉非-2.12的“-Xfatal-warnings”和“-preprecation”。

它应该如下运行:

> show scalacOptions
[info] * -encoding
[info] * utf8
[info] * -Xfatal-warnings
[info] * -deprecation
[info] * -unchecked
[success] Total time: 0 s, completed Jan 2, 2017 11:44:44 PM
> ++2.11.8
[info] Setting version to 2.11.8
[info] Reapplying settings...
[info] Set current project to Hello (in build file:/xxx/)
> show scalacOptions
[info] * -encoding
[info] * utf8
[info] * -unchecked
[success] Total time: 0 s, completed Jan 2, 2017 11:44:51 PM

然而,我在IntelliJ中得到以下内容,看起来有多个问题:

enter image description here enter image description here

这不是IntelliJ问题:

$sbt
[info] Loading global plugins from /Users/fluency03/.sbt/0.13/plugins
[info] Loading project definition from /Users/fluency03/Workplace/flink/flink-project/project/project
[info] Loading project definition from /Users/fluency03/Workplace/flink/flink-project/project
[error] [/Users/fluency03/Workplace/flink/flink-project/build.sbt]:42: illegal character '\u00a0'
[error] [/Users/fluency03/Workplace/flink/flink-project/build.sbt]:43: illegal character '\u00a0'
[error] [/Users/fluency03/Workplace/flink/flink-project/build.sbt]:45: illegal character '\u00a0'
[error] [/Users/fluency03/Workplace/flink/flink-project/build.sbt]:46: illegal character '\u00a0'
Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore?

我又试过了一次:

enter image description here

VS

enter image description here

似乎scalacOptions首先作为List给出,之后,它不能作为{}之类的其他签名给出。但我的困惑是:

  • scalacOptions本身实际上是sbt.TaskKey[scala.Seq[scala.Predef.String]]
  • 如果不同的签名内容不起作用,那么sbt的文档是如何确定的?

0 个答案:

没有答案