为什么SBT在运行外部进程时抛出错误

时间:2017-07-10 13:28:50

标签: sbt

我在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设置正确。

我不清楚缺少什么。

2 个答案:

答案 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 .!