2017-05-22 44 views
2

重寫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運行一套不太嚴格的編譯器選項,這種做法似乎相當簡單。然而,我很難理解爲什麼現有的解決方案不再有效。任何人都可以幫助我直接在這裏?

回答

0

首先,scalacOptions in (Compile, console)它意味着設置scalacOptions編譯您在控制檯輸入。

當你編譯錯誤,這是由你去斯卡拉控制檯之前,編譯器將首先嚐試導致編譯當前項目既然你已經設置好的scalacOptions編譯,所以這錯誤已投擲。

+0

啊,謝謝澄清!因此,由於'console'調用標準的'compile:scalacOptions',所以沒有辦法讓它們與直接調用'compile'時使用的不同。我覺得在這種情況下我想要的是一個較輕的''risky:compile''或者其他類似的東西,所以'risky:console'將啓動一個控制檯會話,其編譯器選項比'console'更少。 –