In this chapter, we will cover the basic tasks related to getting started with Apache Maven:
Installing Maven on Microsoft Windows
Installing Maven on Mac OS X
Installing Maven on Linux
Changing the JDK used by Maven
Creating a simple project with Maven
Building a simple project with Maven
Changing the location of the Maven repository
Running Maven behind an HTTP proxy server
Understanding the standard directory layout
Apache Maven is a popular tool for build automation, primarily Java projects. Maven addresses two aspects of building software. First, it describes how a software is built and, second, it describes its dependencies. It uses conventions for the build procedure. An XML file describes the software project being built, its dependencies on other external modules and components, the build order, directories, and required plugins. It comes with predefined targets to perform certain well-defined tasks, such as code compilation and its packaging. Maven dynamically downloads Java libraries and Maven plugins from one or more repositories, such as the Maven Central Repository, and stores them locally.
Ever since Maven 1.0 was released in 2004, it has gained popularity and is today the build tool for a large number of open source and commercial projects.
If you are reading this book, then you are not here to understand why Maven is required. You are here to explore Maven and unleash the potential that it offers. The objective of this book is to make the reader aware of Maven's various features, which include installation, configuration, and simple to complex usage by means of examples, illustrations, and working projects.
Let's briefly discuss some build automation tools:
Make: If you are from the C programming world, chances are you have used Make. Makefiles are not platform-independent. They are not natively compatible with Windows. Thus, they are unsuited to build Java projects.
Ant: This is modeled after Make and has targets and dependencies. Each target has a set of tasks. Ant doesn't have any conventions. It is procedural and does not have the concept of a build lifecycle. Maven has conventions, is declarative, and has a lifecycle.
In this chapter, we will cover the basics of Maven—installing the software, verifying the installation, and creating, implementing, and building a simple Java project. We will also cover a few advanced items, such as changing the location of the repository or running Maven behind an HTTP proxy server as it could be relevant to those who have issues with the way Maven works by default.
Let us start by setting up Maven. We will cover how to do this on the three popular operating systems, namely Microsoft Windows, Mac OS X, and Linux.
At the time of writing this book, Microsoft Windows 8.1 is the latest version of Microsoft Windows. While the screenshots and output will be for Microsoft Windows 8.1, the steps are similar for earlier (and possibly later) versions as well.
As Maven requires a Java platform, first ensure that you have installed the Java environment on your system, Java Development Kit (JDK) specifically; Java Runtime Environment (JRE) is not sufficient.
You can verify whether Java is installed on your system by opening Add or Remove Programs. If you see something similar to the following screenshot, JDK is installed on your system:

You can also verify the program folder structure from Microsoft Windows Explorer:

Let's start installing Java and Maven by performing the following steps:
Set the variable
JAVA_HOME
to point to the Java installation that you want Maven to use; for example, you can do this by settingJAVA_HOME
variable in the following way:C:\projects\apache_maven_cookbook>set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_20
If JDK is not installed on your system, now is the time to download and install it from the Oracle Java SE download page at http://www.oracle.com/technetwork/java/javase/downloads/index.html.
Once it is installed, ensure
JAVA_HOME
is set as described earlier.Now that we have set up Java, let us download and set up Maven.
Go to http://maven.apache.org/ and click on the Download link.
The links to the latest stable versions of Maven are displayed.
The binaries are available in both,
.zip
and.tar.gz
formats. Choose one of them.Extract the downloaded binary to a folder you want Maven to reside in. In this case I have chosen
C:\software
.Ensure the contents are similar to the following screenshot:
The preceding screenshot displays a list of directories contained in Maven.
Now let's briefly discuss what these directories contain:
The
bin
folder contains the batch files and shell scripts to run Maven on various platforms.The
boot
folder contains the jars required for Maven to start.The
conf
folder contains the defaultsettings.xml
file used by Maven.The
lib
folder contains the libraries used by Maven. It also contains anext
folder in which third-party extensions, which can extend or override the default Maven implementation, can be placed.
Now let us make sure we can run Maven from the command prompt by carrying out the following steps:
A Maven installation is essentially a set of JAR files, configuration files, and a Microsoft Windows batch file, mvn.bat
.
The mvn
command essentially runs this batch file. It first checks for JAVA_HOME
. This file is present in the bin
folder of the Maven installation and, hence, it needs to be in PATH
.
If the batch file does not find JAVA_HOME
, it looks for Java
in its PATH
. This can lead to unexpected results, as typically the Java
in PATH
is usually the JRE and not the JDK.
The batch file then looks for M2_HOME
, which is the location of the Maven installation. It does this so that it can load the libraries that are present.
Additionally, it also reads values specified in MAVEN_OPTS
. This variable allows you to run Maven with an additional heap size and other Java parameters.
Using the values for JAVA_HOME
, M2_HOME
, and Maven_OPTS
, the batch file runs its main class org.codehaus.plexus.classworlds.launcher.Launcher
.
Verify your Maven installation using the following steps:
Open a command prompt in Microsoft Windows and run the following command:
C:\software\apache-maven-cookbook>mvn -version
The following output should be displayed:
Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-14T22:59:23+05:30) Maven home: C:\software\apache-maven-3.2.5 Java version: 1.7.0_67, vendor: Oracle Corporation Java home: C:\Program Files\Java\jdk1.7.0_67\jre Default locale: en_IN, platform encoding: Cp1252 OS name: "windows 8.1", version: "6.3", arch: "amd64", family: "windows"
Let us look at the steps to install Maven on Mac OS X. This applies to the latest version of Mac OS X, namely Yosemite.
Earlier, Apple provided Java for Mac, but stopped doing so from Java 7 onwards. Apple Java is not available on recent versions of Mac OS X.
Let us check if the Java environment is available on your Mac:
Open the terminal and run the following command:
/usr/libexec/java_home -v 1.7
See if you get an output similar to the following:
/Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home
Run the following command to check if you have Java 8:
/usr/libexec/java_home -v 1.8
This should give the following output if Java exists:
/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home
As you can see, my system has both Java 1.7 and 1.8.
Set
JAVA_HOME
to the desired JDK. This can be done in two ways, depending on what you desire:If this is for the duration of the session, run the following command:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home
If this is permanent, add the preceding line in
.bash_profile
in yourHOME
folder
If Java is not present, download and install Java from the Oracle Java download page at http://www.oracle.com/technetwork/java/javase/downloads/index.html.
Once installed, verify the Java installation by following the preceding steps.
Now, let us set up Maven on Mac OS X.
Let's download Maven from its official website by performing the following steps:
Go to http://maven.apache.org/ and click on the Download link. Links to the latest stable versions of Maven will be displayed.
The binaries are available in both
.zip
and.tar.gz
formats. Choose one of them.Extract the downloaded binary to the folder you want Maven to reside in. The typical location for the Mac is
/usr/local
folder.You will need a super user (su) or administrator access to place the contents in the
/usr/local
folder. If you do not have access, you can place the contents in a subfolder of yourHOME
folder.Ensure the contents are similar to the following output by executing the following command:
/usr/local/apache-maven-3.2.5$ ls -l
The output is shown as:
total 27 -rw-r--r-- 1 root wheel 17464 Aug 12 02:29 LICENSE -rw-r--r-- 1 root wheel 182 Aug 12 02:29 NOTICE -rw-r--r-- 1 root wheel 2508 Aug 12 02:26 README.txt drwxr-xr-x 8 root wheel 4096 Aug 19 13:41 bin drwxr-xr-x 3 root wheel 0 Aug 19 13:41 boot drwxr-xr-x 4 root wheel 0 Oct 14 17:39 conf drwxr-xr-x 67 root wheel 28672 Aug 19 13:41 lib
Set the
M2_HOME
variable as follows:export M2_HOME=/usr/local/apache-maven-3.2.5
Update the
PATH
to include Maven'sbin
folder:export PATH=$PATH:$M2_HOME/bin
Tip
Like JAVA_HOME
, the preceding settings can be persisted by updating .bash_profile
with the preceding lines.
In the preceding steps, we discussed the steps to download Maven from its official website. We will now discuss installing Maven using brew. Brew is a popular application on Mac OS X to install open source software. If you have brew installed on your Mac OS X, run the following command to install Maven:
brew install maven
The output for the preceding command will be displayed as shown in the following screenshot:

The Maven installation is essentially a set of JAR files, configuration files, and a Mac OS X shell script, namely mvn
.
The mvn
command essentially runs this script. It first checks for JAVA_HOME
. This file is present in the bin
folder of the Maven installation and, hence, it needs to be in PATH
.
If the shell script does not find JAVA_HOME
, it looks for Java
in its PATH
. This can lead to unexpected results, as typically the Java
in PATH
is usually the JRE installation and not JDK.
The shell script then looks for M2_HOME
, which is the location for the Maven installation. It does this so that it can load the libraries that are present.
Additionally, it also reads values specified in MAVEN_OPTS
. This variable allows you to run Maven with an additional heap size and other Java parameters.
Using the values for JAVA_HOME
, M2_HOME
, and MAVEN_OPTS
, the shell script runs its main class org.codehaus.plexus.classworlds.launcher.Launcher
.
Verify your Maven installation using the following steps:
Open a command prompt and run the following command:
mvn –version
The output for the preceding command should be displayed as shown in the following screenshot:
Let us look at the steps to install Maven on Linux.
While there are many flavors of Linux (Ubuntu, Fedora, RHEL, SUSE, CentOS, and so on), the steps to set up Maven are similar.
Maven needs Java, specifically the Java Development Kit (JDK). Using the following steps, let us check if it is installed in your Linux system, which is a bit tricky:
Open a terminal and run the following command:
java -version
See if you get an output similar to the following:
java version "1.7.0_65" OpenJDK Runtime Environment (rhel-2.5.1.2.el6_5-x86_64 u65-b17)
The preceding output will still not tell you where your Java is installed, which is required to set
JAVA_HOME
. You can get this information by performing the next set of steps.Check if
javac
works; it does only if JDK is installed, not JRE:$ javac -version
The output for the preceding command is shown as:
javac 1.7.0_65
Find the location of the
javac
command:$ which javac
The output for the preceding command is shown as:
/usr/bin/javac
In the preceding output,
javac
is a symbolic link to the actual location of the file. Try to determine this location in the following way:$ readlink /usr/bin/javac
The output for the preceding command is shown as:
/etc/alternatives/javac
By executing the preceding command, we again got the symbolic link. To get the path to the location of
javac
, we execute the following command again:$ readlink /etc/alternatives/javac
The output for the preceding command is shown as:
/usr/lib/jvm/java-1.7.0-openjdk.x86_64/bin/javac
We have now located the folder where JDK is installed:
/usr/lib/jvm/java-1.7.0-openjdk.x86_64/
Set
JAVA_HOME
to the preceding folder. This can be done in two ways, depending on what you desire:If it is for the duration of the session, run the following command:
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk.x86_64/
If this is permanent, add the preceding line in
.bash_profile
in yourHOME
folder.
If Java is not present, download and install Java from the Oracle Java download page at http://www.oracle.com/technetwork/java/javase/downloads/index.html.
If you have an rpm-based Linux distribution, you can download and install rpm
. Otherwise, you can download the .tar.gz
format of the distribution and extract it to a folder of your choice.
In the earlier case, you know exactly where Java is installed and can set JAVA_HOME
correspondingly. Once installed, verify the Java installation by following the preceding steps.
Now, let us set up Maven on Linux.
To set up Maven on Linux, perform the following steps:
Go to http://maven.apache.org/ and click on the Download link. The links to latest stable versions of Maven will be displayed.
The binaries are available in both
.zip
and.tar.gz
formats. For Mac OS X and Linux, the preferred download format is.tar.gz
.Extract the downloaded binary to a folder you want Maven to reside in. The typical location in Linux is the
/usr/local
folder.Execute the following command, and ensure the contents of the
apache-maven-3.2.5
folder are similar to the following output:/usr/local/apache-maven-3.2.5$ ls -l
The output for the preceding command is shown as:
total 27 -rw-r--r-- 1 root root 17464 Aug 12 02:29 LICENSE -rw-r--r-- 1 root root 182 Aug 12 02:29 NOTICE -rw-r--r-- 1 root root 2508 Aug 12 02:26 README.txt drwxr-xr-x 8 root root 4096 Aug 19 13:41 bin drwxr-xr-x 3 root root 0 Aug 19 13:41 boot drwxr-xr-x 4 root root 0 Oct 14 17:39 conf drwxr-xr-x 67 root root 28672 Aug 19 13:41 lib
Set the
M2_HOME
variable as follows:export M2_HOME=/usr/local/apache-maven-3.2.5
Update
PATH
to include Maven'sbin
folder:export PATH=$PATH:$M2_HOME/bin
Like JAVA_HOME
, the preceding settings can be persisted by updating .bash_profile
.
The Maven installation is essentially a set of JAR files, configuration files, and a Linux shell script, namely mvn
.
The mvn
command essentially runs this script. It first checks for JAVA_HOME
. This file is present in the bin
folder of the Maven installation and hence needs to be in PATH
.
If the shell script does not find JAVA_HOME
, it looks for java
in its PATH
. This can lead to unexpected results, as typically, the Java
in PATH
is usually JRE and not JDK.
The shell script then looks for M2_HOME
, which is the location of the Maven installation. It does this so that it can load the libraries that are present.
Additionally, it also reads values specified in MAVEN_OPTS
. This variable allows you to run Maven with an additional heap size and other Java parameters.
Using the values for JAVA_HOME
, M2_HOME
, and MAVEN_OPTS
, the shell script runs its org.codehaus.plexus.classworlds.launcher.Launcher
main class.
Using the following steps, let's confirm that Maven has been set up correctly, by running a Maven command:
Open a command prompt and run the following command:
mvn –version
The following output should be displayed:
Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-14T22:59:23+05:30) Maven home: /usr/local/maven Java version: 1.7.0_65, vendor: Oracle Corporation Java home: /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.65.x86_64/jre Default locale: en_US, platform encoding: ANSI_X3.4-1968 OS name: "linux", version: "2.6.32-279.22.1.el6.x86_64", arch: "amd64", family: "unix"
If you get an error, recheck the installation steps and repeat them.
It is possible to have more than one version of JDK installed on your system. By following some simple steps, you can specify and/or change the JDK to be used by Maven.
You will recall that, in the earlier section, we used Java SE 7. Let us now change to Java SE 8. To change the JDK version to Java SE 8 on Microsoft Windows, perform the following steps:
From the command prompt, run the following command:
set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_20
For Linux or Mac, the command will be:
export JAVA_HOME=<java-8-home-folder>
Now, run the following command to check the version of Maven installed:
mvn –version
To check the version of Maven installed on Microsoft Windows, run the following command from the command prompt. You should get the following output. The output will be similar for Linux and Mac:
C:\projects\apache-maven-cookbook>mvn -version
The output for the preceding command is shown as:
Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-14T22:59:23+05:30) Maven home: C:\software\apache-maven-3.2.5 Java version: 1.8.0_20, vendor: Oracle Corporation Java home: C:\Program Files\Java\jdk1.8.0_20\jre Default locale: en_IN, platform encoding: Cp1252 OS name: "windows 8.1", version: "6.3", arch: "amd64", family: "windows"
Maven always uses the JDK specified by JAVA_HOME
, no matter how many JDK installations are available on the system. This allows the user the flexibility to change JDKs as required or based on the project.
Hence, it is important to ensure JAVA_HOME
is defined. In the absence of this variable, Maven attempts to detect the presence of Java from PATH
. This is typically JRE and not JDK.
Now that we have set up Maven on our favorite operating system and verified that it works fine, it is time to create a simple Java project.
Maven makes it easy to bootstrap a new project by creating a bunch of files and folders following accepted conventions.
Let's start creating the first simple project using Maven, by performing the following steps:
Open a command prompt and change the directory to the folder in which you want to create your first Maven project.
Run the following command:
mvn archetype:generate -DgroupId=com.packt.cookbook -DartifactId=simple-project -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
You can change the
groupId
andartifactId
values in the preceding command as per your requirement.You will see Maven downloading a bunch of files:
Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom (4 KB at 1.4 KB/sec)
Then it will start generating sources:
[INFO] >>> maven-archetype-plugin:2.2:generate (default-cli) > generate-sources @ standalone-pom >>>
When Maven has completed generating sources, it will create the project that we want:
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.0 [INFO] ---------------------------------------------------------------------------- [INFO] Parameter: groupId, Value: com.packt.cookbook [INFO] Parameter: packageName, Value: com.packt.cookbook [INFO] Parameter: package, Value: com.packt.cookbook [INFO] Parameter: artifactId, Value: simple-project [INFO] Parameter: basedir, Value: C:\projects\apache-maven-cookbook [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] project created from Old (1.x) Archetype in dir: C:\projects\apache-maven-cookbook\simple-project
Tip
Downloading the example code
You can download the example code files from your account at http://www.packtpub.com for all the Packt Publishing books you have purchased. If you purchased this book elsewhere, you can visit http://www.packtpub.com/support and register to have the files e-mailed directly to you.
Did you get an while error running the preceding command to create your simple project?
One possibility is that your Maven is behind an HTTP proxy server. If so, see the Running Maven behind an HTTP proxy server recipe in this chapter.
Let's look at the folder structure that is created:

You will notice the following things:
The Maven project configuration file
pom.xml
is created in the root of thesimple-project
folder. We will explore this file in detail in subsequent sections.A bunch of folders are created:
src\main\java
: This is for Java source filessrc\test\java
: This is for Java test source filessrc\main\resources
: This is for resource files for the projectsrc\test\resources
: This is for resource files for the test
Within each of the preceding folders, a folder structure corresponding to the
groupId
(org.packt.cookbook
) is created.
The following are essentially Maven conventions at work:
Maven expects all Java source files to reside
in src\main\java
Similarly, it expects all Java test files to reside in
src\test\java
It expects all project resources to reside in
src\main\resources
and test resources to reside insrc\test\resources
It expects that source files will typically have the same package structure as the
groupId
parameter (though this is not mandatory)Two sample classes, namely
App.java
andAppTest.java
, are also created and it is not expected that they will be used beyond testing how Maven works
The mvn
command that we used in the Creating a simple project with Maven recipe in this chapter, tries to invoke the generate
goal of the archetype
plugin with the specified command-line parameters.
The default Maven installation has minimal features. All features of Maven are available as Maven plugins. When given a plugin name, Maven knows where to download it from and then run it.
In this case, Maven downloads the archetype
plugin. This plugin, in turn, can depend on another plugin. In this case, the latter plugin gets downloaded. This happens in a recursive fashion and, at the end of the process, all the relevant plugins required to run the specified command are downloaded.
These plugins are placed in your local repository, which is a location in your system. Once downloaded, these are never downloaded again unless deleted.
Let us now build the project that was created in the preceding section.
To build the previously created simple project with Maven, perform the following steps:
Open the command prompt and run the following command, changing the directory to the folder the project was created:
mvn package
Observe the following things in the output:
Notice the following warning (we will see how to resolve this later in this book):
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ simple-project --- [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
Check if the sources are compiled:
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ simple-project
Check if the tests are run:
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ simple-project --- [INFO] Surefire report directory: C:\projects\apache-maven-cookbook\simple-project\target\surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.packt.cookbook.AppTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.005 sec
A JAR file is now created.
In the mvn package
command, the package
parameter is a phase in the build lifecycle. Maven has a default build lifecycle that has a number of phases. Each phase will execute every phase prior to it in order along with the specified phase. In this case, the package
phase executes in the following order:
Validate
Compile
Test
Package
The validate
phase makes sure that the project (specifically the pom.xml
file that describes the project) is in order and all the necessary information to run the project is available.
The compile
phase compiles the sources.
The test
phase compiles the test sources and then runs the test using a suitable test framework. In the earlier example, the JUnit framework is used to run the tests.
The package
phase packages the artifacts to the format specified in the pom.xml
file.
There are three types of Maven repositories:
You will have seen Maven downloading a number of files (called poms and jars). Let us see where they are located in your computer:
Go to your
HOME
folder (C:\Users\username
) in the case of Microsoft Windows,/Users/username
for Mac, and,/home/username
(or a similar location) for LinuxYou will notice the
.m2
folder and within that, a subfolder calledrepository
You will see a number of folders and files that are used by Maven
You may want to change this location for the following reasons:
You may want to conserve space in the
C
drive and store these folders and files in theD
drive on Microsoft Windows.You may want to take a back up of the contents. Backup software usually backs up contents in specific folders of the filesystem.
Your organization may have a policy for all users to store a local repository in the same folder.
To change the location of the Maven repository, perform the following steps:
Create a file called
settings.xml
in the.m2
folder.Add the following contents to the settings.xml file that you just created:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <localRepository>C:/software/maven</localRepository> </settings>
Notice the highlighted part of the preceding code. We have changed the location of the repository contents to C:\software\maven. You can change it to any valid folder name.
Delete the
repository
subfolder and run themvn package
command again.You will now notice that the
repository
folder is not created in the.m2
folder. Instead, it is created inC:\software\maven
.
Maven determines the location of the local repository in the following way:
If
settings.xml
exists in the user's.m2
folder, which contains the<localRepository>
tag, then Maven uses its contents to determine the locationIf not, Maven will check if
localRepository
is explicitly defined in the defaultsettings.xml
, present in theconf
folder of the Maven installationIf it is not present there, Maven will use the default value for the local repository, which is the user's
.m2
folder
Most organizations do not allow devices in their network to access the Internet directly for security and other reasons. In such cases, typically, a proxy server comes into picture. The proxy server details are specified in the browser or any other location where access to the Internet is required.
Let's start running Maven behind an HTTP proxy server, by performing the following steps:
Create a
settings.xml
file in the.m2
folder in yourHOME
directory, if it does not exist already.Add the following code within the
settings
tag:<proxies> <proxy> <id>myproxy</id> <active>true</active> <protocol>http</protocol> <host>proxy.myorg.com</host> <port>8080</port> <username>proxyuser</username> <password>somepassword</password> <nonProxyHosts>*.myorg.com </nonProxyHosts> </proxy> </proxies>
If the proxy server does not need authentication, the username
and password
tags can be omitted.
The nonProxyHosts
tag allows you to specify locations that can be accessed directly (for instance, your intranet). This can be skipped if not relevant.
Maven needs Internet access to download plugins and dependencies. When Maven runs, it reads the user's settings.xml
file, if it exists. It checks for any active proxy settings and applies the same.
Maven uses the values in the proxy settings to download any artifacts from the repository. If there are no artifacts to be downloaded, then these values are not used.
When we built our sample Java project earlier, we saw files being compiled, tests being run, and a JAR being generated. We do not know where these artifacts were created.
Let's find where the artifacts were created by performing the following steps:
Go to the folder that has the sample Maven project.
Open the
target
subfolder that was created:
When Maven runs, it puts all the contents that it generates into a separate folder. This is to distinguish it from any user-generated content. Let us examine the contents of this folder:
The
classes
folder: Compiled source files are placed in this folder. This folder will also contain resources, such as XML and property files that are part of the source, placed insrc/main/resources
.The
test-classes
folder: Compiled test source files are available in this folder. In addition, it also contains test resources, which are files required for the purpose of testing, but not for running the project.The
surefire-reports
folder: Test reports are separately placed in this folder. Typically, both XML and HTML report formats are available. The latter can be opened in the browser, while the former can be integrated with a code coverage tool.The output
.jar
file: The generated project artifact is also present in this folder.Two other folders—
maven-archiver
andmaven-status
—hold information used by Maven during the build.