在Linux shell上并行运行多个Gradle命令

时间:2016-05-28 10:17:09

标签: linux gradle command-line spring-boot

请注意:虽然这个问题中的两个主要技术人员是Spring Boot和Gradle,但我真的认为这是一个Linux /命令行问题,涉及前端和后台进程!< / p>

我试图让我的Spring Boot应用程序通过 Gradle hot swap ("dev") mode中运行。阅读this interesting DZone article后,只需几个简单的步骤:

  1. build.gradle
  2. 进行一些小调整
  3. 打开终端并运行./gradlew build --continuous;等待它完成/启动
  4. 打开第二个终端并运行./gradlew bootRun
  5. 瞧!现在,您可以对JVM类进行代码更改,它们将在运行时进行热重新编译,并由Spring Boot应用程序选中。万岁快速开发周期!
  6. 然而,我试图改善这一点。我想只运行一个shell脚本(例如runDevMode.sh)并按正确顺序为我启动这两个进程。所以我试过了:

    ./gradlew build --continuous & ./gradlew bootRun && fg
    

    我把它放在runDevMode.sh内,然后运行sh runDevMode.sh。我可以看到两个任务一开始没有任何错误,但现在当我对我的Java类进行代码更改时,我看不到所发生的变化。关于我出错的地方有任何想法吗?

1 个答案:

答案 0 :(得分:2)

成功的运行是在不同的终端中运行的,所以也许不成功的运行正在争夺相同的资源(无论那些可能是什么)。尝试使用单独的子shell:

  1. 在后台子shell中启动第一个程序实例。
  2. 睡30秒
  3. 在后台子shell中启动第二个程序实例。
  4. 前景&#39; 3&#39;。 (它不需要在后台。)

    ( ./gradlew build --continuous & ) ; sleep 30s && ( ./gradlew bootRun & ) ; fg

  5. 括号中的命令在子shell中启动。在开放式终端中,假设我们运行shbash或其他shell,然后分配变量,然后键入exit,并尝试使用该变量:

    $ PS1='~> ' dash   # assign a temporary prompt, run subshell
    ~> foo=bar
    ~> echo :$foo:
    :bar:
    ~> exit
    $ echo :$foo:
    ::
    

    以上&#39; $ &#39;是主要的shell提示符,(不要输入),&#39; - &gt; &#39;是子shell的提示,(也不要输入)。冒号(&#39; :: &#39;)不是命令,它们有助于在*$foo*未设置或为空时显示。变量赋值不能留下子shell(也不能交叉到并发子shell)。

    另见&#34;化合物命令&#34;在man bash