我试图从命令行调用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程序集.快速,脏,容易.
完成同样事情的另一种更冗长的方法是定义用于生成测试/生成工件的不同命令.
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会话往往会存在很长时间,所以我个人更喜欢第二种选择.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。