请注意:虽然这个问题中的两个主要技术人员是Spring Boot和Gradle,但我真的认为这是一个Linux /命令行问题,涉及前端和后台进程!< / p>
我试图让我的Spring Boot应用程序通过 Gradle 在hot swap ("dev") mode中运行。阅读this interesting DZone article后,只需几个简单的步骤:
build.gradle
./gradlew build --continuous
;等待它完成/启动./gradlew bootRun
然而,我试图改善这一点。我想只运行一个shell脚本(例如runDevMode.sh
)并按正确顺序为我启动这两个进程。所以我试过了:
./gradlew build --continuous & ./gradlew bootRun && fg
我把它放在runDevMode.sh
内,然后运行sh runDevMode.sh
。我可以看到两个任务一开始没有任何错误,但现在当我对我的Java类进行代码更改时,我看不到所发生的变化。关于我出错的地方有任何想法吗?
答案 0 :(得分:2)
成功的运行是在不同的终端中运行的,所以也许不成功的运行正在争夺相同的资源(无论那些可能是什么)。尝试使用单独的子shell:
前景&#39; 3&#39;。 (它不需要在后台。)
( ./gradlew build --continuous & ) ; sleep 30s && ( ./gradlew
bootRun & ) ; fg
括号中的命令在子shell中启动。在开放式终端中,假设我们运行sh
或bash
或其他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
。