This project shows how to build a WAR-less Java web application with Jetty.
Only a single JVM is required to start the web app. No web container or JEE server is required.
Instead of building a war file, an auto-executable JAR file is built with Maven (ie. jetty-webapp-1.0.0-SNAPSHOT.jar)
This JAR contains all resources required by a web application: web.xml, index.jsp, images, js, css... The JettyServer class provides both a start and a stop method. Its main method starts the server. To stop it, you may use the Stop class.
Thanks to the Application Assembler Maven Plugin a start.sh and a stop.sh script are available.
All JAR dependencies are available in a lib\ sub-directory.
Download the code with git:
git clone git://github.com/arey/embedded-jetty-webapp.git
Build and package the web application
cd embedded-jetty-webapp
mvn clean install
Start the web application
target/appassembler/bin/start.sh &
Stop the web application
target/appassembler/bin/stop.sh
Browse to http://localhost:8080/HelloWorld
Web port could be changed at startup:
target/appassembler/bin/start.sh 80 8090 &
Another possibility is to build a JAR that include all its dependencies (web app, jetty dependencies, logger, spring ...) :
mvn clean install -Pfatjar
java -jar target/jetty-webapp-1.0.0-SNAPSHOT-jar-with-dependencies.jar
java -cp target/jetty-webapp-1.0.0-SNAPSHOT-jar-with-dependencies.jar com.javaetmoi.jetty.Stop
Compared to the Maven Standard Directory Layout
of a WAR, the web application sources is not put into the src/main/webapp
but into the src/main/resources/webapp
.
Thus the webapp resources are copied into the JAR in a webapp/ sub-directory.
- Uses Maven as a build tool
- Uses Maven Jetty plugin source code