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

SBT中测试和发布的不同编译选项?,sbt,Sbt,我有一个项目,在创建二进制文件时需要禁用断言。现在我可以做: scalacOptions += "-Xdisable-assertions" 但是,单元测试也将在没有断言的情况下运行。有没有(希望)一种简单的方法来实现我的需求?如何创建二进制文件?您使用什么任务/命令 将任务用作scalacOptions的作用域,以使其具有不同的值。见: 默认情况下,与编译、打包和 正在运行的应用程序的作用域为配置,因此可能会工作 在每种配置中都不同。最明显的例子是 任务键编译、打包和运行;但是所有影响你的钥

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

scalacOptions += "-Xdisable-assertions"

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

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

将任务用作
scalacOptions
的作用域,以使其具有不同的值。见:

默认情况下,与编译、打包和 正在运行的应用程序的作用域为配置,因此可能会工作 在每种配置中都不同。最明显的例子是 任务键编译、打包和运行;但是所有影响你的钥匙 这些键(如SourceDirectory或ScalaOptions或 fullClasspath)的范围也限定在配置中

如有疑问,请使用
检查

> 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+=“-xdisableassertions”
实际上是
scalacOptions in Compile+=“-xdisableassertions”
。使用不同的配置,比如说
Test
,您将得到不同的结果


然而,SBT中存在一个障碍(我第一次回答时就错过了)——设置是链接的,当设置未在范围中定义时,它会从更一般的范围中获取其值。当我说,
scalacOptions+=…
实际上是
scalacOptions in Compile
我错过了设置的重要功能-
scalacOptions
是全局的,而
scalacOptions in Compile
Compile
范围的。

scalacOptions in Compile+=“-Xdisable断言”
@giladhoch这会在任何地方禁用断言。也许您还可以添加:
Test中的scalacOptions~=(\uu.filterNot(\u==“-xdisableassertions”)
,尚未测试它,但我认为这应该行得通……我最终想要的是没有断言的
publish
publish local
。我会尝试一下publish
中的
scalacOptions和publishLocal中的
scalacOptions(你可以缩小范围,但我会把它作为练习留给你:)。我现在没有一个样本项目,所以我不能亲自检查它。如果这个建议不适合你,你介意在GitHub上分享你的建议吗?
是否发布了所有源代码的重新编译?或者
test
compile
任务的二进制文件是否在单独的文件夹中?因为基本上需要重新编译完整的代码以摆脱断言。
publish
取决于配置范围,可以是
Test
Compile
(默认)。所以,是的,对于这些不同的作用域,有不同的二进制文件。可以说,有两个发布(每个配置)
publish
要求
compile
完成它的工作,当需要
compile
时,源代码将被重新编译。如有疑问,请在发布前使用
clean