The simple way would be to branch or copy the existing application and import it into a new project, but this has a major drawback. What if there are bug fixes or changes made to the base web application? If we were to branch, then that would mean having to merge all the changes from the base web application with the new web application! I say GAH!
If you're already using Maven as your build, then it's Maven WAR overlays to the rescue!
An article about Maven WAR overlays can be found here:
To automatically include all dependencies from the base WAR, I use the warpath plugin found here:
You are effectively creating a WAR project that has a dependency on the base WAR project found in your maven repo. Thus, any changes made to the base WAR application can easily be picked up by simply synching up with your SVN code base and rebuilding your new WAR.
In your new web app project, when you make a build, maven will automatically merge the 2 WAR files (base WAR and new app WAR) together to create a new WAR file.
Below is a sample of the pom.xml file to enable this merging:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>au.org.australianphenomics</groupId> <artifactId>podd-apn-webapp</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>podd-apn-webapp</name> <url>http://maven.apache.org</url> <developers> <developer> <name>Philip Wu</name> <email>email@example.com</email> </developer> </developers> <!-- ================ Build ==================== --> <build> <finalName>podd-apn</finalName> <plugins> <plugin> <groupId>org.appfuse</groupId> <artifactId>maven-warpath-plugin</artifactId> <version>2.0.2</version> <extensions>true</extensions> <executions> <execution> <goals> <goal>add-classes</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.0</version> <configuration> <dependentWarIncludes>**</dependentWarIncludes> </configuration> </plugin> </plugins> </build> <!-- ================ Dependencies ==================== --> <dependencies> <dependency> <groupId>au.edu.uq.itee.maenad</groupId> <artifactId>podd-webapp</artifactId> <version>1.0</version> <type>war</type> </dependency> <dependency> <groupId>au.edu.uq.itee.maenad</groupId> <artifactId>podd-webapp</artifactId> <version>1.0</version> <type>warpath</type> </dependency> </dependencies> </project>
As an 'Overlay' the web.xml files from the two WARs are not merged.
If you're looking to do just that, then you might want to take a look at: