SBT中测试和发布的不同编译选项?

时间:2014-03-13 07:07:51

标签: sbt

我有一个项目,我需要在创建二进制文件时禁用断言。现在我可以做:

scalacOptions += "-Xdisable-assertions"

但是,单元测试也会在没有断言的情况下运行。是否有(希望)简单的方法来实现我的需求?

1 个答案:

答案 0 :(得分:1)

如何创建二进制文件?你使用什么任务/命令?

使用该任务作为scalacOptions的范围,为它们提供不同的值。见Scoping by configuration axis

  

默认情况下,与编译,打包和关联的所有键   运行范围限定为配置,因此可能有效   每种配置都有所不同。最明显的例子是   任务键编译,打包和运行;但所有影响的关键   那些键(例如sourceDirectories或scalacOptions或   fullClasspath)也作为配置范围。

如果有疑问,请使用inspect

> inspect scalacOptions
[info] Task: scala.collection.Seq[java.lang.String]
[info] Description:
[info]  Options for the Scala compiler.
[info] Provided by:
[info]  {file:/C:/dev/sandbox/task-dependsOn/}task-dependson/compile:scalacOptions
[info] Defined at:
[info]  (sbt.Classpaths) Defaults.scala:1424
[info] Dependencies:
[info]  task-dependson/compile:autoCompilerPlugins
[info]  task-dependson/compile:settingsData
[info]  task-dependson/compile:update
[info]  task-dependson/compile:buildDependencies
[info]  task-dependson/compile:thisProjectRef
[info] Delegates:
[info]  task-dependson/compile:scalacOptions
[info]  task-dependson/*:scalacOptions
[info]  {.}/compile:scalacOptions
[info]  {.}/*:scalacOptions
[info]  */compile:scalacOptions
[info]  */*:scalacOptions
[info] Related:
[info]  b/compile:scalacOptions
[info]  b/test:scalacOptions
[info]  task-dependson/test:scalacOptions
[info]  task-dependson/jacoco:scalacOptions
[info]  a/jacoco:scalacOptions
[info]  */*:scalacOptions
[info]  a/test:scalacOptions
[info]  a/compile:scalacOptions
[info]  b/jacoco:scalacOptions

Compile配置范围是默认配置范围(请参阅项目的show defaultConfiguration),因此scalacOptions += "-Xdisable-assertions"实际上是scalacOptions in Compile += "-Xdisable-assertions"。使用不同的配置,比如说Test,你会得到不同的结果。

然而SBT中出现了问题(我错过了第一次响应) - 设置被链接,当范围中没有定义设置时,它从更一般的范围获得其值。当我说, scalacOptions +=...实际上是scalacOptions in Compile 我错过了设置的重要功能 - scalacOptions是全局的,而scalacOptions in Compile是{{1} } -scoped。