How to create a Java project with Maven

In this tutorial, we will show you how to use create a Java project with Maven, imports it into the Eclipse IDE, and package the Java project into a jar file.

Tools used :

  1. Maven 3.0.5
  2. Eclipse 4.2
  3. JDK 6
Note
Please make sure Maven is installed and configured properly (Windows, *nix, Mac OSX) before you proceed with this tutorial, to avoid mvn command not found error.

1. Create a Project from Maven Template

In a terminal (*uix or Mac) or command prompt (Windows), navigate to the folder you want to create the Java project. Type this command :


mvn archetype:generate -DgroupId={project-packaging} 
   -DartifactId={project-name} 
   -DarchetypeArtifactId=maven-archetype-quickstart 
   -DinteractiveMode=false

This tells Maven to create a Java project from the Maven maven-archetype-quickstarttemplate. If you ignore the archetypeArtifactId option, a huge list of the Maven templates will be listed.

For example,


$ mvn archetype:generate -DgroupId=com.mkyong -DartifactId=NumberGenerator 
	-DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
	
[INFO] Scanning for projects...

[INFO] -- omitted for readability

[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.mkyong
[INFO] Parameter: packageName, Value: com.mkyong
[INFO] Parameter: package, Value: com.mkyong
[INFO] Parameter: artifactId, Value: NumberGenerator
[INFO] Parameter: basedir, Value: /Users/mkyong/Documents/workspace
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: /Users/mkyong/Documents/workspace/NumberGenerator
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.917s
[INFO] Finished at: Mon Dec 17 18:53:58 MYT 2012
[INFO] Final Memory: 9M/24M
[INFO] ------------------------------------------------------------------------

In above case, a new Java project named “NumberGenerator”, and the entire project directory structure is created automatically.

Note
Few users commented below, the mvn archetype:generate command is failing to generate the project structure. Hmm…, sorry, I just can’t simulate it, if you have any similar issue, no worry, just skip this step, and create the folders manually, see step 2 project structure.

2. Maven Directory Layout

With mvn archetype:generate + maven-archetype-quickstart template, the following project directory structure is created.


NumberGenerator
   |-src
   |---main
   |-----java
   |-------com
   |---------mkyong
   |-----------App.java
   |---test
   |-----java
   |-------com
   |---------mkyong
   |-----------AppTest.java
   |-pom.xml

In simple, all source code puts in folder /src/main/java/, all unit test code puts in /src/test/java/.

In additional, a standard pom.xml is generated. This POM file is like the Ant build.xml file, it describes the entire project information, everything from directory structure, project plugins, project dependencies, how to build this project and etc, read this official POM guide.

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>NumberGenerator</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>NumberGenerator</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

3. Eclipse IDE

To make this as an Eclipse project, in terminal, navigate to “NumberGenerator” project, type this command :


mvn eclipse:eclipse

It will generate all project files that are required by Eclipse IDE.

Figure : Project is imported it into Eclipse IDE

project directory

To import the project into Eclipse IDE, select “File -> Import… -> General->Existing Projects into Workspace”

4. Update POM

The default pom.xml is too simple, often times you need to add the compiler plugin to tell Maven which JDK version is used to compile your project. (The default JDK1.4 is too old).


	<plugin>
		<groupId>org.apache.maven.plugins</groupId>
		<artifactId>maven-compiler-plugin</artifactId>
		<version>2.3.2</version>
		<configuration>
			<source>1.6</source>
			<target>1.6</target>
		</configuration>
	</plugin>

Update the jUnit from 3.8.1 to latest 4.11.


	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.11</version>
		<scope>test</scope>
	</dependency>
Maven Coordinate
The above XML code snippet is called “Maven Coordinate”, If you want junit jar, you need to find out its corresponding Maven coordinate. It applied to all other dependencies, such as Spring, Hibernate, Apache common and etc, just go Maven center repository and find out what is the correct Maven coordinate of the dependency.
pom.xml – updated version

<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>NumberGenerator</artifactId>
	<packaging>jar</packaging>
	<version>1.0-SNAPSHOT</version>
	<name>NumberGenerator</name>
	<url>http://maven.apache.org</url>
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
	  <plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-compiler-plugin</artifactId>
			<version>2.3.2</version>
			<configuration>
				<source>1.6</source>
				<target>1.6</target>
			</configuration>
		</plugin>
	  </plugins>
	</build>

</project>

In terminal, issue the same command mvn eclipse:eclipse again, Maven will download the plugins and project dependencies (junit) from Maven center repository and store it into your local Maven repository automatically.

5. Update Business Logic

Test driven development (TDD), update the unit test first, to make sure App object has a method to generate a unique key that contains exactly 36 alphabets.

AppTest.java

package com.mkyong;

import org.junit.Assert;
import org.junit.Test;

public class AppTest {

	@Test
	public void testLengthOfTheUniqueKey() {

		App obj = new App();
		Assert.assertEquals(36, obj.generateUniqueKey().length());

	}
}

Complete the business logic.

App.java

package com.mkyong;

import java.util.UUID;

/**
 * Generate a unique number
 *
 */
public class App 
{

    public static void main( String[] args )
    {
        App obj = new App();
        System.out.println("Unique ID : " + obj.generateUniqueKey());
    }
    
    public String generateUniqueKey(){
    	
    	String id = UUID.randomUUID().toString();
    	return id;
    	
    }
}

6. Maven Packaging

Now, we will use Maven to compile this project and output to a “jar” file. Refer to the pom.xml file, the packaging element defined what should be the packaging output.

pom.xml

<project ...>
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.mkyong</groupId>
	<artifactId>NumberGenerator</artifactId>
	
	<packaging>jar</packaging>
	
	<version>1.0-SNAPSHOT</version>
	<!-- 

In terminal, type mvn package :


$pwd
/Users/mkyong/Documents/workspace/NumberGenerator

$ mvn package
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building NumberGenerator 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] ...omitted for readability

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.mkyong.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.078 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] 
[INFO] --- maven-jar-plugin:2.3.1:jar (default-jar) @ NumberGenerator ---
[INFO] Building jar: /Users/mkyong/Documents/workspace/NumberGenerator/target/NumberGenerator-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.064s
[INFO] Finished at: Mon Dec 17 23:38:05 MYT 2012
[INFO] Final Memory: 15M/135M
[INFO] ------------------------------------------------------------------------

It compiles, run unit test and package the project into a jar file and put it in the project/target folder.

Figure : Final project directory structure.

final project directory

7. Demo

Run the App example from the project jar file ~


$pwd
/Users/mkyong/Documents/workspace/NumberGenerator

$ java -cp target/NumberGenerator-1.0-SNAPSHOT.jar com.mkyong.App
Unique ID : f1947107-2deb-4926-a635-ea3db61453e8

$ java -cp target/NumberGenerator-1.0-SNAPSHOT.jar com.mkyong.App
Unique ID : 98ed9e1c-d1bc-47f1-847d-64db451ce0ff
How about project's dependencies?
Read these articles - Maven fat jar example (one-jar), Maven fat jar example (shade plugin) and Maven thin jar example.

Download Source Code

Download it - Maven-NumberGenerator.zip (12 KB)

References

  1. Apache Maven Project
  2. A Simple Maven Project
  3. How To Create a Jar File, thin-jar example
  4. Create a fat Jar file - One-JAR example
  5. Create a fat Jar file - Maven Shade Plugin example

About the Author

author image
mkyong
Founder of Mkyong.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 make a donation to these charities.

Comments

Leave a Reply

avatar
newest oldest most voted
martin
Guest
martin

Hi Mkyong.
Your tutorials are the best. Very well explained and simple, you go step by step.

Thank you very much!

Sathish G
Guest
Sathish G

hi mkyong,
i am following u r java articles for past 1 year .working first time with maven nice article

Lucy
Guest
Lucy

Nice tutorial by the way! May I ask how to convert Maven project into NetBeans IDE? I checked on other websites said that it could be automatically opened in NetBeans but I tried and failed to load the project in NetBeans. Anybody could help please? Thanks!!!

mkyong
Guest
mkyong

I don’t use Netbean, hope someone can answer this.

Jason.H
Guest
Jason.H

really nice ! tks !! Mkyong !

trackback
Maven — ?????? 1 ??????????? Java ???? Maven | Tumit's Blog

[…] How to create a Java project with Maven– @mkyong […]

Sarav k
Guest
Sarav k

I am getting
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains):

vijayys
Guest
vijayys

while installing maven plugins this error message is coming ..HOW to solve it??

An error occurred while collecting items to be installed
session context was:(profile=epp.package.jee, phase=org.eclipse.equinox.internal.p2.engine.phases.Collect, operand=, action=).
Problems downloading artifact: osgi.bundle,com.coderplus.m2e.jaxwscore,0.0.1.201505100425.
MD5 hash is not as expected. Expected: a8e4d4ede43c5da5ea1355e3a465872b and found 08b66fce7afe1fc3c48d295fc0c219f6.

Saurabh
Guest
Saurabh

Hi ,
I am not sure my question is related to the post but I am stuck and need help.
I am trying to create maven project running a bat file in java class.Problem is the project gets created in basedir which is the loaction of my java class instead I want to generate the project at specific path mentioned in bat file.

I did used cd specificlocation in my bat file before running maven command but still it uses the basedir . Can you please help me on this.

Thanks

Venkatesh
Guest
Venkatesh

Hi, how can we write a spark program without using maven in java

Prabhu Kumar Ponnaganti
Guest
Prabhu Kumar Ponnaganti

Hi, How to create multi module project with maven. Could provide an example with parent pom.xml? How to organize multi-module project with maven.

Thanks

Dheeraj kumar
Guest
Dheeraj kumar

My dependencies jar i.e. junit jar is not getting imported by maven. Due to which compile time error is coming.

Elom Agboka
Guest
Elom Agboka
Hello Thank you for the tutorial. But I have the following error when running mvn package C:xxxxxxxxxxxxxxxxxxxxxxxxxxxNumberGenerator>mvn package [INFO] Scanning for projects… [ERROR] The build could not read 1 project -> [Help 1] [ERROR] [ERROR] The project com.mkyong:NumberGenerator:1.0-SNAPSHOT (C:UserseagbokaDocumentsprojectsmvn-proj1NumberGeneratorpom.xml) has 1 error [ERROR] Malformed POM C:UserseagbokaDocumentsprojectsmvn-proj1NumberGeneratorpom.xml: Unrecognised tag: ‘plugin’ (position: START_TAG seen …rn rn … @11:11) @ C:UserseagbokaDocumentsprojectsmvn-proj1NumberGeneratorpom.xml, line 11, column 11 -> [Help 2] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about… Read more »
Martin A
Guest
Martin A

Thank you! Very easy to follow.

SumGai
Guest
SumGai

This worked well for me. Thank you for the demonstration.
I don’t understand how AppTest works, though? Are we just checking it will compile?

mkyong
Guest
mkyong

You can run the test manually via mvn test, when you package it mvn package, it will run the test automatically.

Leonardo Cardozo Cadavid
Guest
Leonardo Cardozo Cadavid

You are the best. Thanks

John
Guest
John

Please give, step by step may…!
How people can understand, you started with the command mvn….bla bla……, i started cmd and tried to execute your first command and getting errors. I am seeing your site in google but such a waste site like reoseinda.

mkyong
Guest
mkyong

Sorry, I should mention you have to install Maven first, article is updated.

Surendra
Guest
Surendra

Hi! i’m getting the error as follows;
E:surendramavenbinNumberGenerator>mvn eclipse:eclipse
‘mvn’ is not recognized as an internal or external command,
operable program or batch file.

Could you please help me to get a solution

Thanks in advance..

panchanan
Guest
panchanan

Set M2_HOME, JAVA_HOME and PATH

mkyong
Guest
mkyong

Please install Maven and configure the mavenbin folder to the environment. Refer to the updated article above.

trackback
Deb's Desk – Maven 3 + Hibernate 3.6 + Oracle 11g Example (XML Mapping)

[…] Note More detail, please refer to this How to create a Java project with Maven. […]

trackback
Maven command line | indybee83

[…] Maven command line […]

ahmed abbas
Guest
ahmed abbas

thanks so much.

first time to practice with maven. nice tutrial

hi
Guest
hi
hi, this is the error i am getting plss help Downloading: http://10.132.96.226:9090/archiva/repository/internal/org/apache/ma ven/plugins/maven-metadata.xml Downloading: http://10.132.96.226:9090/archiva/repository/internal/org/codehaus/ mojo/maven-metadata.xml [WARNING] Could not transfer metadata org.apache.maven.plugins/maven-metadata.xm l from/to archiva.default (http://10.132.96.226:9090/archiva/repository/internal /): Error transferring file: Server returned HTTP response code: 502 for URL: ht tp://10.132.96.226:9090/archiva/repository/internal/org/apache/maven/plugins/mav en-metadata.xml [WARNING] Could not transfer metadata org.codehaus.mojo/maven-metadata.xml from/ to archiva.default (http://10.132.96.226:9090/archiva/repository/internal/): Err or transferring file: Server returned HTTP response code: 502 for URL: http://10 .132.96.226:9090/archiva/repository/internal/org/codehaus/mojo/maven-metadata.xm l [INFO] ———————————————————————— [INFO] BUILD FAILURE [INFO] ———————————————————————— [INFO] Total time: 1:59.247s [INFO] Finished at: Wed Oct 23 16:41:07 IST 2013 [INFO] Final Memory: 4M/15M [INFO] ———————————————————————— [ERROR] No plugin found for prefix ‘archetype’ in… Read more »
Saurabh Kumar
Guest
Saurabh Kumar

u haven’t given the proxy to maven to download(access internet) files in the apache-maven-3.1.1confsettings.xml

optional
true
http
proxyuser
proxypass
proxy.host.net
80
local.net|some.host.com

shekar a
Guest
shekar a

Hi,
How to give internet access to maven, where to find my proxy server username and password, etc.., can you please provide me the exact resolution of above error

Zenith
Guest
Zenith

Best one for a beginner :)

Kedar
Guest
Kedar

Excellent!!!

Works like butter…..I was not much knowing about Maven, but this gave me some confidence.

Milad
Guest
Milad

Hi !
” 1. Create a Project from Maven Template ”
I can not create a project . when I write code in cmd ( windows ) it’s Error .
please help to creat a project and run apache syncope .
TnQ

Yilin
Guest
Yilin

Have you downloaded Maven (http://maven.apache.org/download.cgi) and set to your environment variable? if not, no cmd knows what mvn is.

mkyong
Guest
mkyong

Make sure you installed and configured Maven properly. Set $MAVEN/bin to your environment.

sushmita
Guest
sushmita

hi,

Iam getting build error while creating the project:Property artifactID is missing,Can anyone let me know where to configure artifactID.

Enrique
Guest
Enrique

Take a look at your “pom.xml” file. One of the elements is the “artifactId” node.

mKay
Guest
mKay

Hi, I’m struggling to figure out how to actually import the library that I got through maven. Any suggestions how I can find out the name or path to the library that I got from maven?

For some reason I’m not able to figure out how to import the library into my class… :(

Daniel
Guest
Daniel

Hi There..

I have a machine i can not connect to the internet, and getting the error:
ERROR] No plugin found for prefix ?archetype? in the current project and in the
plugin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the
repositories [local (C:\Documents and Settings\paris\.m2\repository), centra
l (http://repo1.maven.org/maven2)] -> [Help 1]

is there a way around this? can i download it? where? how? etc.

Many thanks in advance! :)
Daniel

mkyong
Guest
mkyong

For the first time, Maven need internet to download those plugins and dependencies, unless you configure a local repository manager.

iSumanth
Guest
iSumanth

Sir , please tell me how to configure local repository manager ?

Ivan
Guest
Ivan

Very good tutorial. Thanks bro’!!

Awanth
Guest
Awanth

I have builts the maven archetype project and it builds successfully, but when i open the project in eclipse it shows errors int he api and omod projects.. any idea how to solve those?
thanks

satyam
Guest
satyam

The complete explanation was great and I triggered successfully my application in one shot by looking this content.

Great work mkyong!