当前位置:  开发笔记 > 编程语言 > 正文

如何通过命令行将scalacOptions(Xelide-below)传递给sbt

如何解决《如何通过命令行将scalacOptions(Xelide-below)传递给sbt》经验,为你挑选了1个好方法。

我试图从命令行调用sbt 程序集将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).



1> 小智..:

将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会话以进行调用的事实testAssembly.我的sbt-shell会话往往会存在很长时间,所以我个人更喜欢第二种选择.

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有