Version: 9.4.5.v20170502 |
private support for your internal/customer projects ... custom extensions and distributions ... versioned snapshots for indefinite support ... scalability guidance for your apps and Ajax/Comet projects ... development services for sponsored feature development
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.
This is defined on a per-webapp basis, using the Jetty XML Syntax.
You can specify the override-web.xml
to use for an individual web application in a deployable xml file located in Jetty webapps folder .
For example, if you had a webapp named MyApp, you would place a deployable xml file named myapp.xml
in ${jetty.base}/webapps
which includes an overrideDescriptor
entry for the override-web.xml
file.
<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, you can 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>
web.xml
-formatted file, applied before the webapp’s web.xml
webapp.jetty.xml
files