问题
I have set up a Jetty context by a context.xml for using virtual hosts. So my directory structure looks like this:
webapps
--mycontext.xml
--mycontext.war
Now when i upload a new war, no hot deployment occurs any more. It only happens when i modify mycontext.xml. That was not the case when i worked without a mycontext.xml.
Here is the content of 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>
Any ideas how i regain hot deployment by updating the war file?
回答1:
You need to put your mycontext.xml in the contexts directory of your server. Also you probably need to enable hot deployment in etc/jetty-deploy.xml for the war files in webapps directory as mentioned here. As you can see the configuration enables the hot deployment
......
<Set name="monitoredDirName"><Property name="jetty.home" default="." />/webapps</Set>
.....
Following is the configuration which is working for me
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>
Please note how I have supplied the war file name and location
<Set name="war"><SystemProperty name="jetty.home"/>/webapps/mycontext.war</Set>
jetty.home/etc/jetty-deploy.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>
With this configuration, when I put a modified mycontext.war in webapps, jetty happily redeploys the war.
来源:https://stackoverflow.com/questions/19605683/no-hot-deployment-in-jetty-9-0-6