重寫scalacOptions
爲SBT控制檯不爲我工作的基礎上,在討論:In sbt, how do you override scalacOptions for console in all configurations?如何覆蓋控制檯的scalacOptions?
我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
在我的源代碼文件,導致意外的錯誤一個未使用的導入:
> 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
提供。我感到困惑的是爲什麼compile:console::scalacOptions
中的編譯器選項在運行console
命令時似乎沒有被使用。
我希望能夠爲console
運行一套不太嚴格的編譯器選項,這種做法似乎相當簡單。然而,我很難理解爲什麼現有的解決方案不再有效。任何人都可以幫助我直接在這裏?
啊,謝謝澄清!因此,由於'console'調用標準的'compile:scalacOptions',所以沒有辦法讓它們與直接調用'compile'時使用的不同。我覺得在這種情況下我想要的是一個較輕的''risky:compile''或者其他類似的東西,所以'risky:console'將啓動一個控制檯會話,其編譯器選項比'console'更少。 –