如何覆盖console的ScalaOptions?

如何覆盖console的ScalaOptions?,scala,sbt,Scala,Sbt,根据以下讨论,覆盖SBT控制台的scalacOptions对我不起作用: mybuild.sbt的内容如下: lazy val commonScalacOptions = Seq( "-deprecation", "-encoding", "UTF-8", "-feature", "-unchecked", "-Xfatal-warnings", "-Xlint:-missing-interpolator,_",

根据以下讨论,覆盖SBT控制台的
scalacOptions
对我不起作用:

my
build.sbt
的内容如下:

    lazy val commonScalacOptions = Seq(
      "-deprecation",
      "-encoding", "UTF-8",
      "-feature",
      "-unchecked",
      "-Xfatal-warnings",
      "-Xlint:-missing-interpolator,_",
      "-Yinline-warnings",
      "-Yno-adapted-args",
      "-Ywarn-dead-code",
      "-Ywarn-numeric-widen",
      "-Ywarn-value-discard",
      "-Ywarn-unused-import",
      "-language:existentials",
      "-language:experimental.macros",
      "-language:implicitConversions",
      "-language:higherKinds",
      "-Xfuture")

    lazy val commonSettings = Seq(
      scalaVersion := "2.11.11",
      scalacOptions ++= commonScalacOptions,
      scalacOptions in (Compile, console)  := (scalacOptions in (Compile, console)).value filterNot ("-Ywarn-unused-import" == _),
      scalacOptions in (Test, console)     := (scalacOptions in (Compile, console)).value)

    lazy val root = Project("brontosaurus-rex", file("." + "brontosaurus-rex")).in(file("."))
      .settings(commonSettings: _*)
当我运行SBT会话时,我可以看到
-Ywarn unused imports
选项不是
compile:console::scalacOptions

    > show compile:console::scalacOptions
    [info] * -deprecation
    [info] * -encoding
    [info] * UTF-8
    [info] * -feature
    [info] * -unchecked
    [info] * -Xfatal-warnings
    [info] * -Xlint:-missing-interpolator,_
    [info] * -Yinline-warnings
    [info] * -Yno-adapted-args
    [info] * -Ywarn-dead-code
    [info] * -Ywarn-numeric-widen
    [info] * -Ywarn-value-discard
    [info] * -language:existentials
    [info] * -language:experimental.macros
    [info] * -language:implicitConversions
    [info] * -language:higherKinds
    [info] * -Xfuture
但是,尝试在我的一个源代码文件中使用未使用的导入运行
控制台
,会导致意外错误:

    > console
    [info] Compiling 1 Scala source to [PROJECT_DIR]/brontosaurus-rex/target/scala-2.11/classes...
    [error] [PROJECT_DIR]/brontosaurus-rex/src/main/scala/com/dinosaurs/BrontosaurusRex.scala:3: Unused import
    [error] import scala.util.matching.Regex
    [error]                            ^
    [error] one error found
    [error] (compile:compileIncremental) Compilation failed
    [error] Total time: 0 s, completed May 21, 2017 7:45:53 PM
错误似乎来自
compile:compileIncremental
。当我显示
compile:compileIncremental::scalacOptions
的内容时,我看到了我试图过滤掉的选项:

    > show compile:compileIncremental::scalacOptions
    [info] * -deprecation
    [info] * -encoding
    [info] * UTF-8
    [info] * -feature
    [info] * -unchecked
    [info] * -Xfatal-warnings
    [info] * -Xlint:-missing-interpolator,_
    [info] * -Yinline-warnings
    [info] * -Yno-adapted-args
    [info] * -Ywarn-dead-code
    [info] * -Ywarn-numeric-widen
    [info] * -Ywarn-value-discard
    [info] * -Ywarn-unused-import
    [info] * -language:existentials
    [info] * -language:experimental.macros
    [info] * -language:implicitConversions
    [info] * -language:higherKinds
    [info] * -Xfuture
现在,如果我检查上述内容,它似乎是由
compile:scalacOptions
提供的。我感到困惑的是,为什么在运行
console
命令时没有使用
compile:console::scalacOptions
中的编译器选项


我希望能够为
console
运行一组不那么严格的编译器选项,这种方式看起来相当简单。然而,我很难理解为什么现有的解决方案不再有效。有人能帮我把话说清楚吗?

首先,
scalacOptions在(编译,控制台)
这意味着将
scalacOptions
设置为编译scala,您在控制台中输入


由于您的编译错误,这是由于在您转到Scala控制台之前,编译器将首先尝试编译当前项目,并且由于您已为编译设置了
Scala选项
,因此,因此,这个错误已经发生了。

在SBT 1.3.2中,我这边的工作如下:

  val unusedImports = "-Ywarn-unused:imports"
  ...
  scalacOptions ++= Seq(
    unusedImports,
    "-Yrangepos",
    "-Ywarn-unused:privates"
  ),
  Compile / console / scalacOptions := (Compile / scalacOptions).value filterNot (_ eq unusedImports)

啊,谢谢你的澄清!因此,由于
console
调用了标准的
compile:scalacOptions
,因此无法让它们与直接调用
compile
时使用的选项不同。我想在这种情况下我想要的是一个更轻的
risk:compile
或类似的东西,这样
risk:console
就可以启动一个控制台会话,使用比
console
更严格的编译器选项。