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

我试图从命令行调用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会话往往会存在很长时间,所以我个人更喜欢第二种选择.

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...