0

当我转到 Glassfish 4.x 管理前端并使用未打包的 Eclipse 构建文件夹的路径而不是上传 WAR 文件时,一个简单的“touch .reload”将触发 webapp 容器的相对快速的重新加载。但是,当使用 Glassfish 的 Eclipse 插件时,整个应用程序会在更新一些类后打包成一个战争并部署,这在开发过程中似乎是一件非常愚蠢的事情。

是否有可能使 .reload 机制在 Eclipse 中工作?

从命令行,这可以通过

./asadmin redeploy --name jersey-war-example-1

这甚至消除了轮询。现在我需要以某种方式把它变成一个 Eclipse 构建扩展,它不会为此启动一个 java 实例。

4

1 回答 1

0

如果当前平台支持 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 脚本。

于 2017-09-09T14:25:29.717 回答