Java Jetty监视WAR文件并在其更改时更新

Java Jetty监视WAR文件并在其更改时更新,java,jetty,Java,Jetty,我有一个嵌入式Jetty,它运行着几个不同的上下文,其中一个是WAR文件。我希望Jetty在war文件更改时重新部署它(可能是因为它是由另一个进程重建的) 我当前的配置: ContextHandlerCollection handler = new ContextHandlerCollection(); WebAppContext webAppContext = new WebAppContext("../../webapp/ROOT.war", "/"); handle

我有一个嵌入式Jetty,它运行着几个不同的上下文,其中一个是WAR文件。我希望Jetty在war文件更改时重新部署它(可能是因为它是由另一个进程重建的)

我当前的配置:

    ContextHandlerCollection handler = new ContextHandlerCollection();
    WebAppContext webAppContext = new WebAppContext("../../webapp/ROOT.war", "/");
    handler.setHandlers(new Handler[]{
            new WebAppContext("src/main/webapp", "/api"),
            webAppContext
    });

    Server server = new Server(8080);
    server.setHandler(handler);

如何将其更改为监视和重新部署war文件(
。/../webapp/ROOT.war
)?

不要直接使用
WebAppContext

使用
DeploymentManager
查找并部署您的Web应用程序

ContextHandlerCollection contexts=new ContextHandlerCollection();
setHandler(上下文);
DeploymentManager部署器=新的DeploymentManager();
setContexts(contexts);
deployer.setContextAttribute(
“org.eclipse.jetty.server.webapp.ContainerCludeJarPattern”,
“*/servlet api-[^/]*\\.jar$”;
WebAppProvider webapp_provider=新的WebAppProvider();
//要监视WAR+XML文件的目录
webapp_provider.setmonitoredirname(“/opt/jetty/webapps”);
webapp_provider.setScanInterval(1);//多久扫描一次
webapp_provider.setExtractWars(true);
setempdir(新文件(“/opt/jetty/work”);
deployer.addAppProvider(webapp\u提供者);
addBean(部署器);

这适用于
.war
,但不适用于映射到
/api
的应用程序。但这是一个好的开始!它也适用于
/api
,您只需在监控目录中设置一个可部署的XML即可。所说的XML只是将
WebAppContext
配置为指向目录的路径,而不是war文件。