gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 12:12:29 26 4
gpt4 key购买 nike

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


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

  1. 对您的 build.gradle 做一些小的调整
  2. 打开终端并运行./gradlew build --continuous;等待它完成/启动
  3. 打开第二个终端并运行./gradlew bootRun
  4. 瞧!现在您可以对您的 JVM 类进行代码更改,它们将被动态热重新编译并由您的 Spring Boot 应用程序获取。万岁快速开发周期!

不过,我正在努力改进这一点。我只想运行一个 shell 脚本(例如 runDevMode.sh)并让这两个进程以正确的顺序为我启动。所以我尝试了:

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

我将其放入 runDevMode.sh 中,然后运行 ​​sh runDevMode.sh。我可以看到这两个任务都没有任何错误地开始,但是现在当我对我的 Java 类进行代码更改时,我没有看到更改被拾取。关于我哪里出错的任何想法?

最佳答案

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

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

    ( ./gradlew build --continuous & ) ;睡 30 秒 && ( ./gradlew
    引导运行 & ) ; fg


括号中的命令在子 shell 中启动。在打开的终端中,假设我们运行 shbash 或另一个 shell,然后分配一个变量,然后键入 exit,并尝试使用它变量:

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

$”上方是主 shell 提示符,(不要输入),“->”是子 shell 的提示符,(不要输入那个)。冒号 ('::') 不是命令,它们有助于显示何时 *$foo* 未设置或为空。变量赋值不能离开子 shell,(也不能交叉到并发子 shell)。

另请参阅 man bash 中的“复合命令”。

关于linux - 在 Linux shell 上并行运行多个 Gradle 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37497776/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com