2013-10-26 83 views
1

我已經通過context.xml爲使用虛擬主機設置了Jetty上下文。所以,我的目錄結構是這樣的:在Jetty 9.0.6中沒有熱部署

webapps 
--mycontext.xml 
--mycontext.war 

現在,當我上傳新的戰爭,沒有熱部署更多的發生。它只發生在我修改mycontext.xml時。當我沒有使用mycontext.xml時,情況並非如此。

這裏是mycontext.xml

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd"> 

<Configure class="org.eclipse.jetty.webapp.WebAppContext"> 

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> 
<!-- Required minimal context configuration :      --> 
<!-- + contextPath             --> 
<!-- + war OR resourceBase           --> 
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> 
<Set name="contextPath">/</Set> 
<Set name="war"><Property name="jetty.webapps" default="."/>/mycontext.war</Set> 

<Set name="virtualHosts"> 
    <Array type="String"> 
    <Item>example.com</Item> 
     <Item>www.example.com</Item> 
     <Item>localhost</Item> 
    <Item>127.0.0.1</Item> 
    </Array> 
</Set> 
</Configure> 

任何想法如何,我重獲熱部署通過更新WAR文件的內容?

+0

這看起來像一個錯誤。我在https://bugs.eclipse.org/420944 –

+0

上爲您提出了一個問題謝謝。我非常感謝你的工作。 –

回答

0

您需要將您的mycontext.xml放在服務器的上下文目錄中。此外,您可能需要在etc/jetty-deploy.xml中啓用熱部署,以便提供中提到的webapps目錄中的war文件。正如你所看到的配置使熱部署

...... 
<Set name="monitoredDirName"><Property name="jetty.home" default="." />/webapps</Set> 
..... 

以下是這是爲我工作的配置

jetty.home/contextx/mycontext.xml

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd"> 

<Configure class="org.eclipse.jetty.webapp.WebAppContext"> 

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> 
<!-- Required minimal context configuration :      --> 
<!-- + contextPath             --> 
<!-- + war OR resourceBase           --> 
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> 
<Set name="contextPath">/mycontext</Set> 
<Set name="war"><SystemProperty name="jetty.home"/>/webapps/mycontext.war</Set> 

<Set name="virtualHosts"> 
    <Array type="String"> 
    <Item>example.com</Item> 
     <Item>www.example.com</Item> 
     <Item>localhost</Item> 
    <Item>127.0.0.1</Item> 
    </Array> 
</Set> 
</Configure> 

請注意如何我提供了戰爭文件的名稱和位置

<Set name="war"><SystemProperty name="jetty.home"/>/webapps/mycontext.war</Set> 

jetty.home/etc/jetty-deplo y.xml

<?xml version="1.0"?> 
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd"> 

<!-- =============================================================== --> 
<!-- Create the deployment manager         --> 
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> 
<!-- The deplyment manager handles the lifecycle of deploying web --> 
<!-- applications. Apps are provided by instances of the    --> 
<!-- AppProvider interface. Typically these are provided by   --> 
<!-- one or more of:             --> 
<!-- jetty-webapps.xml  - monitors webapps for wars and dirs --> 
<!-- jetty-contexts.xml  - monitors contexts for context xml --> 
<!-- jetty-templates.xml  - monitors contexts and templates  --> 
<!-- =============================================================== --> 
<Configure id="Server" class="org.eclipse.jetty.server.Server"> 

    <Call name="addBean"> 
     <Arg> 
     <New id="DeploymentManager" class="org.eclipse.jetty.deploy.DeploymentManager"> 
      <Set name="contexts"> 
      <Ref id="Contexts" /> 
      </Set> 
      <Call name="setContextAttribute"> 
      <Arg>org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern</Arg> 
      <Arg>.*/servlet-api-[^/]*\.jar$</Arg> 
      </Call> 


      <Call id="webappprovider" name="addAppProvider"> 
      <Arg> 
      <New class="org.eclipse.jetty.deploy.providers.WebAppProvider"> 
       <Set name="monitoredDirName"><Property name="jetty.home" default="." />/webapps</Set> 
       <Set name="defaultsDescriptor"><Property name="jetty.home" default="." />/etc/webdefault.xml</Set> 
       <Set name="scanInterval">1</Set> 
       <Set name="extractWars">true</Set> 
      </New> 
      </Arg> 
     </Call> 

     </New> 
     </Arg> 
    </Call> 
</Configure> 

利用這種配置,當我把修改mycontext.war中的webapps,碼頭高高興興 重新部署戰爭。

+0

不適用於我。據我所知,與我的配置唯一的區別是你提供戰爭路徑的方式。我試過了,但jetty.home/webapps和jetty.webapps應該是平等的。 我的解決方法是在自動分發過程中觸摸mycontext.xml。現在已經足夠了。 –