这个感觉应该很简单,但是我好像做不好。
在
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'
我不知道如何解决它。
SBT 使用 Process API。
显式创建
Process
应该可以让您按预期定义命令。
未测试,但我会尝试:
Process(Seq("make", "JAVAC_FLAGS='-cp dependency.jar'"))