How to execute a bash script as sbt task?

前端 未结 2 717
悲&欢浪女
悲&欢浪女 2020-12-13 04:18

I want to automatically build documentation for my Java Play 2.3 application. At the moment, I use a Makefile to generate images from *.dotfiles and combine Mar

相关标签:
2条回答
  • 2020-12-13 05:04

    You can find some answers in External Processes in the official documentation of sbt, e.g.

    To run an external command, follow it with an exclamation mark !:

     "find project -name *.jar" !
    

    Don't forget to use import scala.sys.process._ so ! can be resolved as a method of String.

    Do the following in activator console (aka sbt shell) to execute yourshell.sh - mind the eval command and the quotes around the name of the script:

    eval "yourshell.sh" !
    

    To have it available as a task add the following to build.sbt of your project:

    lazy val execScript = taskKey[Unit]("Execute the shell script")
    
    execScript := {
      "yourshell.sh" !
    }
    
    0 讨论(0)
  • 2020-12-13 05:04

    We had the requirement to execute some npm scripts as sbt task and let the build fail if one of the npm scripts fails. Took me some time to find a way to create a Task that works on Windows and Unix. And so here is what I came up with.

    lazy val buildFrontend = taskKey[Unit]("Execute frontend scripts")
    
    buildFrontend := {
          val s: TaskStreams = streams.value
          val shell: Seq[String] = if (sys.props("os.name").contains("Windows")) Seq("cmd", "/c") else Seq("bash", "-c")
          val npmInstall: Seq[String] = shell :+ "npm install"
          val npmTest: Seq[String] = shell :+    "npm run test"
          val npmLint: Seq[String] = shell :+    "npm run lint"
          val npmBuild: Seq[String] = shell :+   "npm run build"
          s.log.info("building frontend...")
          if((npmInstall #&& npmTest #&& npmLint #&& npmBuild !) == 0) {
            s.log.success("frontend build successful!")
          } else {
            throw new IllegalStateException("frontend build failed!")
          }
    },
    (run in Compile) <<= (run in Compile).dependsOn(buildFrontend)
    
    0 讨论(0)
提交回复
热议问题