MAVEN is the most popular Build automation tool. In JAVA environment, packaging is a common thing. Whenever we develop some code, we will create packages. In real time, the source code may contain different packages, to build many packages we require some scripts to automate that build process.
Here comes the part of Build automation tools. There are many such tools, in this post we are going to discuss MAVEN. It can be used to automate the entire build process, pom.xml (POM -Project Object Model) is the main configuration file. Unlike ANT, Maven uses its own directory structure.
Maven follows different phases in its Default Life Cycle.
Installation is so simple, just to unzip the file and set the environment variable for Maven_Home.
Set the Environment Variable:
To check the version,
C:\Users\lokes>mvn --version
As we discussed, MAVEN follows own directory structure. To get this, we need to generate the archetype (Template kind of) for our Maven.
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9>mvn archetype:generate
Lets see the directory structure,
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9>dir
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9>
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9>cd java_app
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app>

F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app>dir
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app>cd src
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app>cd src\main\java
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app\src\main\java>
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app\src\main\java>dir
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app\src\main\java>cd jar
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app\src\main\java\jar>
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app\src\main\java\jar>dir
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app\src\main\java\jar>
Default pom.xml generated by archetype....
Let's try to run and observe different phases of Maven Life Cycle....
################################################################################
Here comes the part of Build automation tools. There are many such tools, in this post we are going to discuss MAVEN. It can be used to automate the entire build process, pom.xml (POM -Project Object Model) is the main configuration file. Unlike ANT, Maven uses its own directory structure.
Maven follows different phases in its Default Life Cycle.
Validate
: In this phase, Maven downloads all
required packages and jars.
Compile
: It compiles the source code.
Test cases
: Runs test cases.
Run Tests
: Runs tests (can be QA, UAT).
Package
: Creates/generates package files.
Install
: Responsible to perform
installations.
Deploy
: Actual deployment of jar files to
Web Server.
Note: “Whenever
a phase is called, maven automatically calls all its prior phases….”
Installation is so simple, just to unzip the file and set the environment variable for Maven_Home.
Set the Environment Variable:
To check the version,
C:\Users\lokes>mvn --version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5;
2015-11-10T11:41:47-05:00)
Maven home:
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\bin\..
Java version: 1.8.0_121, vendor: Oracle Corporation
JAVA is a must.....
Java home: C:\Program Files (x86)\Java\jdk1.8.0_121\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 10", version:
"10.0", arch: "x86", family: "dos"
C:\Users\lokes>F:\Workspace_local\Maven_Practice\apache-maven-3.3.9>mvn archetype:generate
[INFO] Scanning for
projects...
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 2.5 KB/sec)
Downloading:
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/22/maven-plugins-22.pom
Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/22/maven-plugins-22.pom
(13 KB at 82.7 KB/sec)
Downloading:
https://repo.maven.apache.org/maven2/org/apache/maven/maven-
************ OUTPUT TRUNCATED
************
1760: remote ->
tr.com.obss.sdlc.archetype:obss-archetype-java (This archetype provides a
common skelton for the Java packages.)
1761: remote ->
tr.com.obss.sdlc.archetype:obss-archetype-webapp (This archetype provides a
skelton for the Java Web Application packages.)
1769: remote ->
us.fatehi:schemacrawler-archetype-plugin-lint (-)
Choose a number or apply filter (format:
[groupId:]artifactId, case sensitive contains): 923:
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: 5
Downloading:
https://repo.maven.apache.org/maven2/org/apache/maven/archetypes/maven-archetype-quickstart/1.0/maven-archetype-quickstart-1.0.jar
Downloaded:
https://repo.maven.apache.org/maven2/org/apache/maven/archetypes/maven-archetype-quickstart/1.0/maven-archetype-quickstart-1.0.jar
(5 KB at 28.2 KB/sec)
Downloading:
https://repo.maven.apache.org/maven2/org/apache/maven/archetypes/maven-archetype-quickstart/1.0/maven-archetype-quickstart-1.0.pom
Downloaded:
https://repo.maven.apache.org/maven2/org/apache/maven/archetypes/maven-archetype-quickstart/1.0/maven-archetype-quickstart-1.0.pom
(703 B at 10.2 KB/sec)
Define value for property 'groupId': : com.myjava
Define value for property 'artifactId':
: java_app
Define value for property 'version': 1.0-SNAPSHOT: : 1.0
Define value for property 'package': com.myjava: : jar
Confirm properties configuration:
groupId: com.myjava
artifactId: java_app
version: 1.0
package: jar
Y: : Y
[INFO]
----------------------------------------------------------------------------
[INFO] Parameter: package, Value: jar
[INFO] Parameter: groupId, Value: com.myjava
[INFO] Parameter: artifactId, Value: java_app
[INFO] Parameter: packageName, Value: jar
[INFO] Parameter: version, Value: 1.0
[INFO] project created from Old (1.x) Archetype
in dir: F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app
[INFO]
------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO]
------------------------------------------------------------------------
[INFO] Total time: 02:24 min
[INFO] Finished at: 2017-02-02T20:25:08-05:00
[INFO] Final Memory: 11M/51M
[INFO]
------------------------------------------------------------------------
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9>Lets see the directory structure,
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9>dir
Volume in drive F
is ENTERTAINMENT
Volume Serial Number is 42C5-DACA
Directory of
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9
02/02/2017 08:25 PM <DIR>
.
02/02/2017 08:25 PM <DIR>
..
11/10/2015 11:44 AM <DIR>
bin
11/10/2015 11:44 AM <DIR>
boot
11/10/2015 11:38 AM <DIR>
conf
02/02/2017 08:25 PM <DIR>
java_app
11/10/2015 11:44 AM <DIR>
lib
11/10/2015 11:44 AM
19,335 LICENSE
11/10/2015 11:44 AM
182 NOTICE
11/10/2015 11:38 AM
2,541 README.txt
3
File(s) 22,058 bytes
7 Dir(s)
226,675,310,592 bytes freeF:\Workspace_local\Maven_Practice\apache-maven-3.3.9>cd java_app
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app>

F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app>dir
Volume in drive F
is ENTERTAINMENT
Volume Serial Number is 42C5-DACA
Directory of
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app
02/02/2017 08:25 PM <DIR>
.
02/02/2017 08:25 PM <DIR>
..
02/02/2017 08:25 PM
648 pom.xml
02/02/2017 08:25 PM <DIR>
src
1
File(s) 648 bytes
3 Dir(s)
226,675,310,592 bytes freeF:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app>cd src\main\java
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app\src\main\java>
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app\src\main\java>dir
Volume in drive F
is ENTERTAINMENT
Volume Serial Number is 42C5-DACA
Directory of
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app\src\main\java
02/02/2017 08:25 PM <DIR>
.
02/02/2017 08:25 PM <DIR>
..
02/02/2017 08:25 PM <DIR>
jar
0
File(s) 0 bytes
3 Dir(s)
226,675,310,592 bytes freeF:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app\src\main\java>cd jar
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app\src\main\java\jar>
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app\src\main\java\jar>dir
Volume in drive F
is ENTERTAINMENT
Volume Serial Number is 42C5-DACA
Directory of
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app\src\main\java\jar
02/02/2017 08:25 PM <DIR>
.
02/02/2017 08:25 PM <DIR>
..
02/02/2017 08:25 PM
179 App.java
1
File(s) 179 bytes
2 Dir(s)
226,675,310,592 bytes freeF:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app\src\main\java\jar>
Default pom.xml generated by archetype....
<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.myjava</groupId>
<artifactId>java_app</artifactId>
<packaging>jar</packaging>
<version>1.0</version>
<name>java_app</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>
Let's try to run and observe different phases of Maven Life Cycle....
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app>mvn
compile
[INFO] Scanning for projects...
[INFO]
[INFO]
------------------------------------------------------------------------
[INFO] Building java_app 1.0
[INFO] ------------------------------------------------------------------------
Downloading:
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.pom
Downloaded:
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.pom
(8 KB at 4.3 KB/sec)
Downloaded:
https://repo.maven.apache.org/maven2/org/apache/maven/maven/2.0.6/maven-2.0.6.pom
(9 KB at 90.2 KB/sec)
************** OUTPUT TRUNCATED **************
Downloaded: https://repo.maven.apache.org/maven2/junit/junit/3.8.2/junit-3.8.2.jar
(118 KB at 62.6 KB/sec)
Downloaded:
https://repo.maven.apache.org/maven2/com/google/collections/google-collections/1.0/google-collections-1.0.jar
(625 KB at 327.7 KB/sec)
[INFO]
------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO]
------------------------------------------------------------------------
[INFO] Total time: 22.574 s
[INFO] Finished at: 2017-02-02T20:57:20-05:00
[INFO] Final Memory: 12M/29M
[INFO]
------------------------------------------------------------------------
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app>
Let’s Check whether “target” directory
created or not….
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app>dir
Volume in drive F is ENTERTAINMENT
Volume Serial Number is 42C5-DACA
Directory of
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app
02/02/2017 08:57 PM <DIR>
.
02/02/2017 08:57 PM <DIR>
..
02/02/2017 08:25 PM
648 pom.xml
02/02/2017 08:25 PM <DIR>
src
02/02/2017 08:57 PM <DIR>
target
1
File(s) 648 bytes
4
Dir(s) 226,675,310,592 bytes free
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app>
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app>cd
target
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app\target>
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app\target>dir
Volume in drive F is ENTERTAINMENT
Volume Serial Number is 42C5-DACA
Directory of F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app\target
02/02/2017 08:57 PM <DIR>
.
02/02/2017 08:57 PM <DIR>
..
02/02/2017 08:57 PM <DIR>
classes
02/02/2017 08:57 PM <DIR>
maven-status
0
File(s) 0 bytes
4
Dir(s) 226,675,310,592 bytes free
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app\target>
If
you try compiling one more time, it won’t download anything. Since the download
of required packages and jars is one time.
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9>cd
../
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app>
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app>mvn
compile
[INFO] Scanning for projects...
[INFO]
[INFO]
------------------------------------------------------------------------
[INFO] Building java_app 1.0
[INFO]
------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources
(default-resources) @ java_app ---
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile
(default-compile) @ java_app ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO]
------------------------------------------------------------------------
[INFO] Total time: 2.492 s
[INFO] Finished at: 2017-02-02T21:01:27-05:00
[INFO] Final Memory: 6M/16M
[INFO]
------------------------------------------------------------------------
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app>
Now let’s try to run the test phase (So, it
will call Validate, Compile and Test)
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app>mvn
test
[INFO] Scanning for projects...
[INFO]
[INFO]
------------------------------------------------------------------------
[INFO] Building java_app 1.0
[INFO]
------------------------------------------------------------------------
Downloading:
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-surefire-plugin/2.12.4/maven-surefire-plugin-2.12.4.pom
Downloaded:
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-surefire-plugin/2.12.4/maven-surefire-plugin-2.12.4.pom
(11 KB at 15.1 KB/sec)
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test
(default-test) @ java_app ---
************ OUTPUT TRUNCATED ************
Downloading:
https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-booter/2.12.4/surefire-booter-2.12.4.pom
Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-booter/2.12.4/surefire-booter-2.12.4.pom
(3 KB at 39.0 KB/sec)
Downloading:
https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-api/2.12.4/surefire-api-2.12.4.pom
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running jar.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time
elapsed: 0.008 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO]
------------------------------------------------------------------------
[INFO] Total time: 7.584 s
[INFO] Finished at: 2017-02-02T21:02:42-05:00
[INFO] Final Memory: 14M/35M
[INFO]
------------------------------------------------------------------------
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app>
Let’s
check the “package” phase…
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app>mvn
package
[INFO] Scanning for projects...
[INFO]
[INFO]
------------------------------------------------------------------------
[INFO] Building java_app 1.0
[INFO] ------------------------------------------------------------------------
Downloading:
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-jar-plugin/2.4/maven-jar-plugin-2.4.pom
Downloaded:
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-jar-plugin/2.4/maven-jar-plugin-2.4.pom
(6 KB at 6.3 KB/sec)
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources
(default-resources) @ java_app ---
[INFO] skip non existing resourceDirectory
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app\src\main\resources
************ OUTPUT TRUNCATED ************
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test
(default-test) @ java_app ---
[INFO] Surefire report directory:
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app\target\surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running jar.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time
elapsed: 0.005 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @
java_app ---
Downloading:
https://repo.maven.apache.org/maven2/org/apache/maven/maven-archiver/2.5/maven-archiver-2.5.pom
Downloaded:
https://repo.maven.apache.org/maven2/org/apache/maven/maven-archiver/2.5/maven-archiver-2.5.pom
(5 KB at 59.1 KB/sec)
************ OUTPUT TRUNCATED ************
Downloaded: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/3.0/plexus-utils-3.0.jar
(221 KB at 550.6 KB/sec)
[INFO] Building jar:
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app\target\java_app-1.0.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO]
------------------------------------------------------------------------
[INFO] Total time: 8.880 s
[INFO] Finished at: 2017-02-02T21:04:33-05:00
[INFO] Final Memory: 9M/23M
[INFO] ------------------------------------------------------------------------
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app>
We
can see clearly, "package" phase called all its prior phases (Validate, Compile, Test cases
and then Package) …
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app>dir
Volume in drive F is ENTERTAINMENT
Volume Serial Number is 42C5-DACA
Directory of
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app
02/02/2017 08:57 PM <DIR>
.
02/02/2017 08:57 PM <DIR>
..
02/02/2017 08:25 PM
648 pom.xml
02/02/2017 08:25 PM <DIR>
src
02/02/2017 09:04 PM <DIR>
target
1
File(s) 648 bytes
4
Dir(s) 226,675,298,304 bytes free
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app>
Final output of package phase should be, generating a jar file...
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app>cd
target
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app\target>dir
Volume in drive F is ENTERTAINMENT
Volume Serial Number is 42C5-DACA
Directory of
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app\target
02/02/2017 09:04 PM <DIR>
.
02/02/2017 09:04 PM <DIR>
..
02/02/2017 08:57 PM <DIR>
classes
02/02/2017 09:04 PM
1,969 java_app-1.0.jar
02/02/2017 09:04 PM <DIR>
maven-archiver
02/02/2017 08:57 PM <DIR>
maven-status
02/02/2017 09:02 PM <DIR>
surefire-reports
02/02/2017 09:02 PM <DIR>
test-classes
1
File(s) 1,969 bytes
7
Dir(s) 226,675,298,304 bytes free
F:\Workspace_local\Maven_Practice\apache-maven-3.3.9\java_app\target>
Similar to all these phases, install and deploy phases will be. Deploy will be the final phase where our source code will be deployed to our
Web Server.
In real time, this Build automation will be performed for many
builds at a time and so all of them should be integrated continuously and will
deployed continuously. To achieve automated Build process along with Continuous
Integration and followed by Continuous Delivery we use tools like Jenkins,
which will be covered in our next post.
################################################################################
No comments:
Post a Comment