如果当前平台支持 inotify,可以将其连接到 Glassfish RESTful API 以触发部署重新加载任何更改:
#!/bin/bash
webappdir=`pwd`/target/jersey-war-example-1.0-SNAPSHOT
while inotifywait -e close_write -r $webappdir; do
curl -v -H 'Accept: application/json' \
-X POST \
-H 'X-Requested-By: loadr' \
-F force=true \
-F id=$webappdir \
-F isredeploy=true \
-F virtualservers=server \
-F contextRoot=/ \
-F name=jersey-war-example \
http://localhost:4848/management/domain/applications/application
done
只需确保将更新的类文件写入正确的文件夹即可。使用 maven 时,将其添加到 pom.xml:
<build>
<!-- make compile-on-save work with app servers serving from the webapp build directory -->
<outputDirectory>${project.build.directory}/${project.artifactId}-${project.version}/WEB-INF/classes</outputDirectory>
这样,甚至不需要轮询机制及其隐式延迟,也不需要管理 CLI 的 JVM 启动。WildFly 11 也是如此。在https://gist.github.com/jjYBdx4IL/55334bc09e635c6e8d7a2fa30b2919ef上可以找到对两台服务器执行此操作的 BASH 脚本。