我想调用 sbt assembly从命令行将 scalac 编译器标志传递给elides(elide-below 1)。
通过将此行添加到 build.sbt 中,我设法使标志在 build.sbt 中工作scalacOptions ++= Seq("-Xelide-below", "1")
当我启动 sbt 并运行以下命令时,它也工作正常:
$> sbt
$> set scalacOptions in ThisBuild ++=Seq("-Xelide-below", "0")
但是我想知道如何在启动 sbt 时传入它,以便我的 CI 作业可以在执行不同的汇编目标(即 dev/test/prod)时使用它。
最佳答案
将 elide 级别作为命令行选项传递的一种方法是使用系统属性
scalacOptions ++= Seq("-Xelide-below", sys.props.getOrElse("elide.below", "0"))
并运行
sbt -Delide.below=20 assembly
.快速,肮脏和容易。另一种更详细的方法来完成同样的事情是定义不同的命令来生成测试/生产工件。
lazy val elideLevel = settingKey[Int]("elide code below this level.")
elideLevel in Global := 0
scalacOptions ++= Seq("-Xelide-below", elideLevel.value.toString)
def assemblyCommand(name: String, level: Int) =
Command.command(s"${name}Assembly") { s =>
s"set elideLevel in Global := $level" ::
"assembly" ::
s"set elideLevel in Global := 0" ::
s
}
commands += assemblyCommand("test", 10)
commands += assemblyCommand("prod", 1000)
你可以运行
sbt testAssembly prodAssembly
.这为您提供了一个更清晰的命令名称,并且您不必退出事件的 sbt-shell session 即可调用例如 testAssembly
.我的 sbt-shell session 往往会持续很长时间,所以我个人更喜欢第二种选择。
关于scala - 如何通过命令行将 scalacOptions(Xelide-below)传递给 sbt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34627179/