我在SBT中创建一个将某些脚本上传到S3的任务。我使用带有aws cli s"aws s3 cp ./someDir $uploadPath --recursive" ! log
的 SBT外部进程上传到S3。
它抛出错误
java.io.IOException:无法运行程序" aws":CreateProcess error = 2,系统找不到指定的文件
仅在Windows上发生这种情况。当我在Ubuntu构建系统中运行相同的项目/任务时,它工作正常。 AWS cli安装在Windows机器上,并且PATH设置正确。
我不清楚缺少什么。
答案 0 :(得分:1)
似乎sbt内部进程库在Windows中不包含PATH变量。
合适的解决方法是在单独的文件中提取aws命令并触发此文件的执行:
你的doSomeStuff.bat将是:
aws s3 cp ./someDir $uploadPath --recursive
并在build.sbt中添加
lazy val someStuff = taksKey[Unit]("Execute a aws command")
yarnBuild := {
"./doSomeStuff.bat" !
}
答案 1 :(得分:0)
另一种可能的解决方法是在shell内运行命令(并且您必须了解所有“有问题”环境的shell)
val shell: Seq[String] = if (sys.props("os.name").contains("Windows")) Seq("cmd", "/c") else Seq("bash", "-c")
val command: Seq[String] = shell :+ "<your command here>"
command .!