繁体   English   中英

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

[英]Running multiple Gradle commands in parallel on Linux shell

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


我正在尝试通过Gradle使我的 Spring Boot 应用程序在热插拔(“开发”)模式下运行 阅读这篇有趣的 DZone 文章后,只需几个简单的步骤:

  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 & ) ; sleep 30s && ( ./gradlew bootRun & ) ; fg


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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM