scala sbt:执行shell命令,而不将其拆分为空格

ztigrdn8  于 2023-10-18  发布在  Scala
关注(0)|答案(1)|浏览(135)

这一个感觉应该很简单,但我似乎不能得到它的权利。
在我的build.sbt项目配置中,我需要用一个重写变量调用make。不要问我为什么,这是没有办法的。
问题是,被重写的变量的值包含一个空格。尽管该命令可以直接在shell中完美工作,但在sbt中却失败了。我怀疑这是因为无论启动进程的是什么,它都会用空格分割命令,并以参数列表的形式将它们直接输入到进程中,这并不能保持可靠性。
这是我的build.sbt文件的近似摘录:

  1. lazy val root = (project in file("."))
  2. .settings(
  3. Compile / sourceGenerators += Def.task {
  4. val extraClasspath = "-cp dependency.jar"
  5. val command: String = s"make JAVAC_FLAGS='$extraClasspath'"
  6. println(s"Running:\n$command")
  7. command !
  8. Seq.empty // obviously I generate some sources but that's not important
  9. }
  10. )

结果是,坦率地说,相当愚蠢:

  1. Running:
  2. make JAVAC_FLAGS='-cp dependency.jar'
  3. make: *** No rule to make target 'dependency.jar''

我认为在一个过程的沿着,

  1. make
  2. JAVAC_FLAGS='-cp
  3. dependency.jar'

我不知道该怎么办

6kkfgxo0

6kkfgxo01#

SBT使用Process API
显式创建Process应该可以让您按预期定义命令。
没有测试,但我会尝试:

  1. Process(Seq("make", "JAVAC_FLAGS='-cp dependency.jar'"))

相关问题