Wildfly Maven插件+热部署

时间:2015-08-11 13:57:15

标签: maven jboss wildfly

我有一个Java Spring应用程序,在Eclipse Mars中配置,我在Eclipse中运行Wildfly 9。我使用wildfly-maven-plugin来部署到服务器。

这些是我遵循的步骤:

从eclipse启动服务器并执行Maven构建,该构建还将应用程序部署到服务器。我可以在服务器上看到很多日志"成功部署"我可以在浏览器中访问我的应用程序。它在" / standalone / data / content"下创建一个文件夹。但在#34;独立/部署"

下没有战争或爆炸的WAR

如果我更改了一些代码并将其保存在eclipse中,(我已选中自动发布复选框并构建保存),则服务器日志会显示:替换部署" myApp.war"部署" myApp.war"内容已从位置"独立\ data \ content ..."

中删除

我看到在步骤1中创建的prev文件夹被删除,myApp.war被添加到部署文件夹中。但现在我无法在浏览器中访问我的应用程序。

auto-deploy-exploded="true"

这是在standalone.xml的部分。

3 个答案:

答案 0 :(得分:3)

wildfly-maven-plugin使用管理操作部署应用程序。它不会仅将任何爆炸内容部署到存档中。换句话说,在重新部署之前,您需要重新创建部署存档,否则将无法看到更改。

正如@ozOli所说,最好使用JBoss Tools。

有一个开放的issue允许部署爆炸内容。目前仅针对run目标提出此建议,但也可能会扩展以部署爆炸内容。我认为部署爆炸内容。

一般情况下,虽然"热部署"源需要重新编译然后重新部署。 redploy是注释的关键,需要重新扫描。

答案 1 :(得分:1)

对于Eclipse,您可以使用JBoss Tools插件:http://tools.jboss.org/

答案 2 :(得分:0)

Wildfly 具有管理 REST 支持。不需要花哨的工具。

这是一个用于 Maven 项目的 Wildfly 和 Glassfish 自动重新部署的 BASH 脚本,即。在 Eclipse 中使用自动编译时:

set -x

pubname=$1
usewar=$2
if [[ -z $pubname ]]; then
    pubname=ROOT
fi
if [[ -z "$usewar" ]]; then
    usewar=0
else
    usewar=1
fi
if ! webappdir=$(ls -d `pwd`/target/*-SNAPSHOT); then
    webappdir=$(pwd)
fi
iswildfly=0

ctxroot="/$pubname"
if [[ "$pubname" == "ROOT" ]]; then
    ctxroot="/"
fi

port=4848
if curl http://localhost:9991/ ; then
    port=9991
    iswildfly=1
elif curl http://localhost:9990/ ; then
    port=9990
    iswildfly=1
fi

if (( usewar )); then
    webappdir=$webappdir.war
    if ! (( iswildfly )); then
        webappdir="@"$webappdir
    fi
fi

wildflycmd() {
    local cmd=$1
    curl --retry 100 --retry-delay 3 --retry-connrefused --digest -L -u admin:admin -D - http://localhost:$port/management \
        --header "Content-Type: application/json" \
        -d "$cmd"
}

if (( iswildfly )); then
    wildflycmd '{"operation" : "composite", "address" : [], "steps" : [{"operation" : "undeploy", "address" : {"deployment" : "'$pubname'.war"}},{"operation" : "remove", "address" : {"deployment" : "'$pubname'.war"}}],"json.pretty":1}'
    if (( usewar )); then
    wildflycmd '{"operation" : "composite", "address" : [], "steps" : [{"operation" : "add", "address" : {"deployment" : "'$pubname'.war"}, "content" : [{"url" : "file:'$webappdir'"}]},{"operation" : "deploy", "address" : {"deployment" : "'$pubname'.war"}}],"json.pretty":1}'
    else
    wildflycmd '{"operation" : "composite", "address" : [], "steps" : [{"operation" : "add", "address" : {"deployment" : "'$pubname'.war"}, "content" : [{"path" : "'$webappdir'", "archive":"false"}]},{"operation" : "deploy", "address" : {"deployment" : "'$pubname'.war"}}],"json.pretty":1}'
    fi
fi

inotifyEvents=""
if ! [[ "$(uname)" =~ ^CYGWIN ]]; then
        inotifyEvents="-e close_write"
fi

while inotifywait $inotifyEvents -r $webappdir --excludei "\.(js|html|css)$" || :; do
    if ! (( iswildfly )); then
        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=$ctxroot \
        -F name=$pubname \
        http://localhost:$port/management/domain/applications/application
    else
        wildflycmd '{"operation" : "composite", "address" : [], "steps" : [{"operation" : "redeploy", "address" : {"deployment" : "'$pubname'.war"}}],"json.pretty":1}'
    fi
done

只需使用 mvn clean wildfly:run 启动 Wildfly 实例。

来源:https://github.com/jjYBdx4IL/snippets/blob/master/java/jee_autodeploy.sh