1. Create pom-root(root project) and multiple WAR modules(web-1, web-2, and web-parent projects).
pom.xml of root project is applied to share dependencies to other web projects.
<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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.blogshot.wittakarn</groupId> <artifactId>root</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>root</name> <properties> <endorsed.dir> ${project.build.directory}/endorsed </endorsed.dir> <project.build.sourceEncoding> UTF-8 </project.build.sourceEncoding> <!-- Maven Build Plugin Properties --> <my.maven.compiler>3.0</my.maven.compiler> <my.maven.war>2.4</my.maven.war> <!-- Java Properties --> <my.java>1.7</my.java> <!-- Dependency Properties --> <my.org.primefaces>5.1</my.org.primefaces> <my.commons.fileupload>1.2.2</my.commons.fileupload> <my.commons.io>2.4</my.commons.io> <my.maven.resources>2.6</my.maven.resources> <!-- Scope provided --> <my.javaee.web.api>6.0</my.javaee.web.api> <my.mojarra>2.2.6</my.mojarra> </properties> <build> <plugins> <plugin> <groupId> org.apache.maven.plugins </groupId> <artifactId> maven-compiler-plugin </artifactId> <version> ${my.maven.compiler} </version> <configuration> <source> ${my.java} </source> <target> ${my.java} </target> <encoding> ${project.build.sourceEncoding} </encoding> <showDeprecation> true </showDeprecation> </configuration> </plugin> <plugin> <groupId> org.apache.maven.plugins </groupId> <artifactId> maven-war-plugin </artifactId> <version>${my.maven.war}</version> <configuration> <failOnMissingWebXml> false </failOnMissingWebXml> <attachClasses>true</attachClasses> <archiveClasses>true</archiveClasses> <archive> <manifest> <addDefaultImplementationEntries> true </addDefaultImplementationEntries> <addDefaultSpecificationEntries> true </addDefaultSpecificationEntries> </manifest> </archive> </configuration> </plugin> <plugin> <inherited>true</inherited> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>${my.maven.resources}</version> <executions> <execution> <id>copy-resources</id> <phase>prepare-package</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory> ${basedir}/target/classes </outputDirectory> <resources> <resource> <directory> ${basedir}/src/main/webapp </directory> <includes> <include>**/*</include> </includes> <excludes> <exclude>WEB-INF/**</exclude> </excludes> <targetPath> /META-INF/resources </targetPath> </resource> <resource> <directory> src/main/resources </directory> <filtering>true</filtering> </resource> <resource> <directory> ${basedir}/src/main/webapp/WEB-INF </directory> <includes> <include> faces-config.xml </include> </includes> <targetPath>/META-INF</targetPath> </resource> </resources> </configuration> </execution> </executions> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>javax</groupId> <artifactId>javaee-web-api</artifactId> <version>${my.javaee.web.api}</version> <scope>provided</scope> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>${my.commons.fileupload}</version> <scope>compile</scope> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>${my.commons.io}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.glassfish</groupId> <artifactId>javax.faces</artifactId> <version>${my.mojarra}</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.primefaces</groupId> <artifactId>primefaces</artifactId> <version>${my.org.primefaces}</version> <scope>compile</scope> </dependency> </dependencies> </project>
All of web projects(web-1, web-2, and web-parent projects) will reference to root project in order to get dependencies.
pom.xml of web-1 project.
<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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <artifactId>root</artifactId> <groupId>com.blogshot.wittakarn</groupId> <version>0.0.1-SNAPSHOT</version> </parent> <groupId>com.blogshot.wittakarn.web</groupId> <artifactId>web-1</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>web-1</name> </project>pom.xml of web-2 project.
<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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <artifactId>root</artifactId> <groupId>com.blogshot.wittakarn</groupId> <version>0.0.1-SNAPSHOT</version> </parent> <groupId>com.blogshot.wittakarn.web</groupId> <artifactId>web-2</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>web-2</name> </project>
2. Including web-1 and web-2 projects inside web-parent project
Developers can include multiple WAR modules by packing as a jar inside another WAR module. In the case of web-1 and web-2 are sub modules of web-parent, develops just include dependency of web-1 and web-2 as following.
<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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <artifactId>root</artifactId> <groupId>com.blogshot.wittakarn</groupId> <version>0.0.1-SNAPSHOT</version> </parent> <groupId>com.blogshot.wittakarn.web</groupId> <artifactId>web-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>web-parent</name> <dependencies> <dependency> <groupId>com.blogshot.wittakarn.web</groupId> <artifactId>web-1</artifactId> <version>0.0.1-SNAPSHOT</version> <classifier>classes</classifier> </dependency> <dependency> <groupId>com.blogshot.wittakarn.web</groupId> <artifactId>web-2</artifactId> <version>0.0.1-SNAPSHOT</version> <classifier>classes</classifier> </dependency> </dependencies> </project>
The dependency hierarchy is shown below.
Dependency Hierachy of web-parent |
After developers build root, web-1, web-2, and web-parent respectively. The result of war will show as below figure.
Then the wab-parent-0.0.1-SNAPSHOT.war is ready to deploy on JAVA EE web application server such as Weblogic 12c, Glassfish 3.1.2.2 and so on.