2015-11-06 102 views
0

我有一個嵌入式Jetty,運行時有幾個不同的上下文,其中一個是WAR文件。我想讓Jetty在戰爭文件發生變化時重新部署(可能是因爲它是由另一個進程重建的)。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)?

回答

1

請勿直接使用WebAppContext。使用DeploymentManager查找並部署您的web應用程序。

ContextHandlerCollection contexts = new ContextHandlerCollection(); 
    server.setHandler(contexts); 

    DeploymentManager deployer = new DeploymentManager(); 
    deployer.setContexts(contexts); 
    deployer.setContextAttribute(
      "org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern", 
      ".*/servlet-api-[^/]*\\.jar$"); 

    WebAppProvider webapp_provider = new WebAppProvider(); 
    // The directory to monitor for WAR + XML files 
    webapp_provider.setMonitoredDirName("/opt/jetty/webapps"); 
    webapp_provider.setScanInterval(1); // how often to scan 
    webapp_provider.setExtractWars(true); 
    webapp_provider.setTempDir(new File("/opt/jetty/work")); 

    deployer.addAppProvider(webapp_provider); 
    server.addBean(deployer); 
+0

這適用於'.war',但不適用於映射到'/ api'的應用程序。但這是一個好的開始! – Jorn

+0

它也適用於'/ api',你只需要在受監控的目錄中設置一個可部署的XML。所述XML只是將一個「WebAppContext」配置爲一個目錄的路徑,而不是一個war文件。 –