3.2. Creating a Simple Project
To start a new Maven project, use the Maven Archetype plugin from the
command line. Run the archetype:generate
goal, select default
archetype suggested by pressing "Enter". This will use the archetype
org.apache.maven.archetypes:maven-archetype-quickstart
. Press
"Enter" again to confirm the latest version of the archetype and then
"Enter" to confirm the supplied parameters.
Warning
At the time of publication, the default
maven-archetype-quickstart
was item #312 in a list of 860 available
archetypes. As more and more projects release Maven archetypes, this
list will change and the number for the default archetype may
change. When you run archetype:generate
as shown below, the default
maven-archetype-quickstart
will be selected by default.
$ mvn archetype:generate -DgroupId=org.sonatype.mavenbook \
-DartifactId=simple \
-Dpackage=org.sonatype.mavenbook \
-Dversion=1.0-SNAPSHOT
[INFO]
[INFO] -----------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] -----------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom <<<
[INFO]
[INFO] --- maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Interactive mode
[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
Choose archetype:
...
312: remote -> org.apache.maven.archetypes:maven-archetype-quickstart (An archetype which contains a sample Maven project.)
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 312:
Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
1: 1.0-alpha-1
2: 1.0-alpha-2
3: 1.0-alpha-3
4: 1.0-alpha-4
5: 1.0
6: 1.1
Choose a number: 6:
[INFO] Using property: groupId = org.sonatype.mavenbook
[INFO] Using property: artifactId = simple
[INFO] Using property: version = 1.0-SNAPSHOT
[INFO] Using property: package = org.sonatype.mavenbook
Confirm properties configuration:
groupId: org.sonatype.mavenbook
artifactId: simple
version: 1.0-SNAPSHOT
package: org.sonatype.mavenbook
Y: :
[INFO] ---------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.1
[INFO] ---------------------------------------------------------
[INFO] Parameter: groupId, Value: org.sonatype.mavenbook
[INFO] Parameter: packageName, Value: org.sonatype.mavenbook
[INFO] Parameter: package, Value: org.sonatype.mavenbook
[INFO] Parameter: artifactId, Value: simple
[INFO] Parameter: basedir, Value: /Volumes/mac-data/dev/github/sonatype
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: /Volumes/mac-data/dev/github/sonatype/simple
[INFO] BUILD SUCCESS
...
mvn
is the Maven command. archetype:generate
is called a Maven
goal. An archetype is defined as “an original model or type
after which other similar things are patterned; a prototype.” A
number of archetypes are available in Maven for anything from a simple
application to a complex web application, and the
archetype:generate
offers a list of archetypes to
choose from. In this chapter, we are going to use the most basic
archetype to create a simple skeleton starter project. The plugin is
the prefix archetype
, and the goal is generate
.
Once we’ve generated a project, take a look at the directory structure
Maven created under the simple directory:
simple/(1)
simple/pom.xml(2)
/src/
/src/main/(3)
/main/java
/src/test/(4)
/test/java
This generated directory adheres to the Maven Standard Directory
Layout. We’ll get into more details later in this chapter, but for
now, let’s just try to understand these few basic directories:
(1)
|
The Maven Archetype plugin creates a directory simple that
matches the artifactId . This is known as the project’s base
directory.
|
(2)
|
Every Maven project has what is known as a Project Object Model
(POM) in a file named pom.xml . This file describes the project,
configures plugins, and declares dependencies.
|
(3)
|
Our project’s source code and resources are placed under
src/main . In the case of our simple Java project this will consist
of a few Java classes and some properties file. In another project,
this could be the document root of a web application or configuration
files for an application server. In a Java project, Java classes are
placed in src/main/java and classpath resources are placed in
src/main/resources .
|
(4)
|
Our project’s test cases are located in src/test . Under this
directory, Java classes such as JUnit or TestNG tests are placed in
src/test/java , and classpath resources for tests are located in
src/test/resources .
|
The Maven Archetype plugin generated a single class
org.sonatype.mavenbook.App
, which is a 13-line Java class with a
static main function that prints out a message:
package org.sonatype.mavenbook;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}
The simplest Maven archetype generates the simplest possible program:
a program which prints "Hello World!" to standard output.