这一个感觉应该很简单,但我似乎不能得到它的权利。
在我的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'
我不知道该怎么办
1条答案
按热度按时间6kkfgxo01#
SBT使用Process API。
显式创建
Process
应该可以让您按预期定义命令。没有测试,但我会尝试: