There is no exact or official solution to convert an existing Java web project to a Maven based web application project. Basically, the Maven based project conversion will involve two major changes, which is :

  1. Folder structure – Follow this Maven’s folder structure.
  2. Dependency library – Put all your dependency libraries in pom.xml file.

Steps to convert Java based –> Maven based

This guide will show you how to convert the following servlet web application to Maven based structure, and support Eclipse IDE.

Existing Java web project structure
A simple Java servlet web application , with one “javaee.jar” dependency library

Existing Java web project structure

1. Maven web project folder structure

Create following new Maven’s folder structure.

  1. Move all exiting java source files to this folder – “\src\main\java“.
  2. Move “web.xml” file to this folder – “\src\main\webapp\WEB-INF“.
  3. Create a new “pom.xml” file, put it to the project root folder.
Note
Always, refer to this Maven Standard Directory Layout for detail explanation.

See following diagram, this is how it look like after converted.

new Maven based project structure

2. Project details

Fill in the existing project details in “pom.xml” file, add remote repository, war plugin and compiler plugin.

File : pom.xml

<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>com.mkyong</groupId>
	<artifactId>serlvetdemo</artifactId>
	<packaging>jar</packaging>
	<version>1.0-SNAPSHOT</version>
	<name>serlvetdemo</name>
	<url>http://maven.apache.org</url>
 
	<repositories>
		<repository>
			<id>java.net</id>
			<url>http://download.java.net/maven/2</url>
		</repository>
	</repositories>
 
	<build>
	  <plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-war-plugin</artifactId>
			<configuration>
				<webResources>
					<resource>
						<directory>${basedir}/src/main/java</directory>
						<targetPath>WEB-INF/classes</targetPath>
						<includes>
							<include>**/*.properties</include>
							<include>**/*.xml</include>
							<include>**/*.css</include>
							<include>**/*.html</include>
						</includes>
					</resource>
				</webResources>
			</configuration>
		</plugin>
 
		<plugin>
			<artifactId>maven-compiler-plugin</artifactId>
			<configuration>
				<source>1.6</source>
				<target>1.6</target>
			</configuration>
		</plugin>
 
	   </plugins>
	</build>
 
</project>

3. Configure the dependency libraries

This is the most annoying and time consuming session, you need to add your project’s dependency libraries in “pom.xml” manually.

Try find your project’s dependency libraries in Maven Central Repository , Java.net Maven Repository , or other remote repository. Patient… find the required Maven library code and include it into “pom.xml” file manually :)

Note
For custom library, you need to install it into your Maven Local Repository manually.

See the “pom.xml” file again, after all dependency libraries are added.

<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>com.mkyong</groupId>
	<artifactId>serlvetdemo</artifactId>
	<packaging>jar</packaging>
	<version>1.0-SNAPSHOT</version>
	<name>serlvetdemo</name>
	<url>http://maven.apache.org</url>
 
	<repositories>
		<repository>
			<id>java.net</id>
			<url>http://download.java.net/maven/2</url>
		</repository>
	</repositories>
 
	<dependencies>
		<dependency>
			<groupId>javax</groupId>
			<artifactId>javaee-api</artifactId>
			<version>6.0</version>
		</dependency>
	</dependencies>
 
	<build>
	   <plugins>
		<!-- Maven War file generator plugin -->
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-war-plugin</artifactId>
			<configuration>
				<webResources>
					<resource>
						<directory>${basedir}/src/main/java</directory>
						<targetPath>WEB-INF/classes</targetPath>
						<includes>
							<include>**/*.properties</include>
							<include>**/*.xml</include>
							<include>**/*.css</include>
							<include>**/*.html</include>
						</includes>
					</resource>
				</webResources>
			</configuration>
		</plugin>
 
		<!-- Maven compiler plugin -->
		<plugin>
			<artifactId>maven-compiler-plugin</artifactId>
			<configuration>
				<source>1.6</source>
				<target>1.6</target>
			</configuration>
		</plugin>
 
	   </plugins>
	</build>
 
</project>

4. Compile It – “mvn compile”

Compile it, Maven will download all the dependency libraries into your local repository.

E:\workspace\serlvetdemo>mvn compile
[INFO] Scanning for projects...
.......
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------

5. Make it Support Eclipse IDE

Almost done, now convert the new Maven based project to support Eclipse IDE.

mvn eclipse:eclipse -Dwtpversion=2.0

After that, you can import this project into Eclipse IDE.

6. Generate WAR file for deployment

Generate project’s WAR file with “mvn war:war“, the new generated WAR file will store in “/rootproject/target/” folder named “serlvetdemo-1.0-SNAPSHOT.war“, Maven will packed it along with the entire dependency libraries, classes and deployment structure automatically.

E:\workspace\serlvetdemo>mvn war:war
[INFO] Scanning for projects...
.......
[INFO] Processing war project
[INFO] Copying webapp resources[E:\workspace\serlvetde
[INFO] Webapp assembled in[47 msecs]
[INFO] Building war: E:\workspace\serlvetdemo\target\s
[INFO] -----------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] -----------------------------------------------
...

7. Done

Your war file is ready for the deployment. And your existing Java web project is converted into Maven based project.

Note
The whole conversion processes are mainly involve the folder structure and “pom.xml“, this is all what Maven is required. The dependency libraries setting is very time consuming, especially when your project has more than 30-40 dependency libraries :).
Tags :
Founder of Mkyong.com and HostingCompass.com, love Java and open source stuff. Follow him on Twitter, or befriend him on Facebook or Google Plus. If you like my tutorials, consider making a donation to this charity, thanks.

Related Posts

Popular Posts