2014-03-13 22 views
0

我有一个项目,我需要在创建二进制文件时禁用断言。现在我可以这样做:SBT中测试和发布的不同编译选项?

scalacOptions += "-Xdisable-assertions" 

但是,然后单元测试将运行没有断言。有没有(希望)简单的方法来实现我所需要的?

+3

'scalacOptions在编译+ = “-Xdisable-断言”' –

+0

@giladhoch这到处禁用断言。 – ziggystar

+0

也许你还可以添加:'测试〜=(_.filterNot(_ ==“-Xdisable-assertions”))'scalacOptions',没有测试过,但我认为这应该工作... –

回答

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 CompileCompile-放大。

+0

我最终希望没有断言是'publish'和'publish-local'。 – ziggystar

+0

我试着在publishLocal中使用'scalacOptions'和''publishLocal''中的scalacOptions(你可以缩小它们,但是我会把它作为练习:))。我现在没有一个示例项目,所以我无法自己检查它。你介意在GitHub上分享你的,如果这个建议不适合你? –

+0

“发布”是否发布所有来源的重新编译?或者是'test'和'compile'任务的二进制文件在单独的文件夹中?因为基本上需要发生的是重新编译完整的代码以摆脱断言。 – ziggystar