sbt:执行 shell 命令,而不用空格分割

问题描述 投票:0回答:1

这个感觉应该很简单,但是我好像做不好。

build.sbt
中的项目配置中,我需要使用覆盖的变量调用
make
。别问我为什么,没有办法解决这个问题。

问题是,被覆盖的变量的值包含空格。尽管该命令直接在 shell 中运行得很好,但在 sbt 中却失败了。我怀疑这是因为无论启动什么进程,都会将命令按空格分割,并将它们直接输入到参数列表中的进程中,这不会保持健全性。

这是我的

build.sbt
文件的大致摘录:

lazy val root = (project in file("."))
  .settings(
    Compile / sourceGenerators += Def.task {

      val extraClasspath = "-cp dependency.jar"
      val command: String = s"make JAVAC_FLAGS='$extraClasspath'"
      println(s"Running:\n$command")
      command !

      Seq.empty // obviously I generate some sources but that's not important

    }
  )

坦率地说,结果非常愚蠢:

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

我认为在这个过程中的某个地方,一个过程是从参数开始的

make
JAVAC_FLAGS='-cp
dependency.jar'

我不知道如何解决它。

scala sbt
1个回答
0
投票

SBT 使用 Process API

显式创建

Process
应该可以让您按预期定义命令。

未测试,但我会尝试:

Process(Seq("make", "JAVAC_FLAGS='-cp dependency.jar'"))
© www.soinside.com 2019 - 2024. All rights reserved.