To deploy a web application or WAR into different environments, most likely you will need to customize the
webapp for compatibility with each environment. The challenge is to do so without changing the webapp itself. You can
use a jetty.xml file for some of this work since it is not part of the webapp. But there are
some changes that jetty.xml cannot accomplish, for example, modifications to servlet init-params
and context init-params. Using webdefault.xml is not an option because Jetty applies
webdefault.xml to a web application before the application's own
WEB-INF/web.xml, which means that it cannot override values inside the webapp's
web.xml.
The solution is override-web.xml. It is a web.xml file that Jetty
applies to a web application after the application's own WEB-INF/web.xml,
which means that it can override values or add new elements. You define it per-webapp, using the Jetty XML Syntax.
You can specify the override-web.xml to use for an individual web application, in that
webapp's
jetty-web.xml
.
<Configure class="org.eclipse.jetty.webapp.WebAppContext"> ... <!-- Set up the path to the custom override descriptor, relative to your $(jetty.home) directory or to the current directory --> <Set name="overrideDescriptor"><SystemProperty name="jetty.home" default="."/>/my/path/to/override-web.xml</Set> ... </Configure>
The equivalent in code is:
import org.eclipse.jetty.webapp.WebAppContext;
...
WebAppContext wac = new WebAppContext();
...
//Set the path to the override descriptor, based on your $(jetty.home) directory
wac.setOverrideDescriptor(System.getProperty("jetty.home")+"/my/path/to/override-web.xml");
...
Alternatively, use the classloader (Jetty Classloading) to get the path to the override descriptor as a resource.
Use the <overrideDescriptor> tag as follows:
<project>
...
<plugins>
<plugin>
...
<artifactId>jetty-maven-plugin</artifactId>
<configuration>
<webAppConfig>
...
<overrideDescriptor>src/main/resources/override-web.xml</overrideDescriptor>
</webAppConfig>
</configuration>
</plugin>
...
</plugins>
...
</project>
webdefault.xml
–Information for this web.xml -formatted
file, applied before the webapp's web.xml webapp.jetty.xml
–Reference for
jetty.xml files