In this post, I am going to demonstrate the use of Maven wrapper plugin. Maven wrapper plugin is used to distribute Maven software with your project and makes your project more portable.
Let me explain with an example to understand this wrapper plugin better.
Step 1: Create new maven project ‘wrapper-plugin-demo’. Refer below post for more details
https://self-learning-java-tutorial.blogspot.com/2022/03/create-new-maven-project-in-eclipse.html
Step 2: Update pom.xml with below content.
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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sample.app</groupId>
<artifactId>wrapper-plugin-demo</artifactId>
<version>1</version>
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.report.outputEncoding>UTF-8</project.report.outputEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries>
<Main-Class>com.sample.app.HelloWorld</Main-Class>
<Build-Number>1.0</Build-Number>
</manifestEntries>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Step 3: Create a package com.sample.app and define HelloWorld class.
HelloWorld.java
package com.sample.app;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
Total project structure looks like below.
Let’s add maven wrapper to the project ‘wrapper-plugin-demo’.
Navigate to the project directory ‘wrapper-plugin-demo’ and execute below command.
mvn -N io.takari:maven:wrapper -Dmaven=3.6.0
$mvn -N io.takari:maven:wrapper -Dmaven=3.6.0
[INFO] Scanning for projects...
[INFO]
[INFO] -----------------< com.sample.app:wrapper-plugin-demo >-----------------
[INFO] Building wrapper-plugin-demo 1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven:0.7.7:wrapper (default-cli) @ wrapper-plugin-demo ---
[INFO]
[INFO] Maven Wrapper version 0.5.6 has been successfully set up for your project.
[INFO] Using Apache Maven: 3.6.0
[INFO] Repo URL in properties file: https://repo.maven.apache.org/maven2
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.354 s
[INFO] Finished at: 2022-03-15T15:03:49+05:30
[INFO] ------------------------------------------------------------------------
Once the command executed successfully, you can observe two files (mvnw, mvnw.cmd) and one hidden directory (.mvn) is created in the project.
$ls -lart
total 64
drwxr-xr-x 4 krishna staff 128 Mar 15 14:55 src
-rw-r--r-- 1 krishna staff 1428 Mar 15 14:57 pom.xml
drwxr-xr-x 24 krishna staff 768 Mar 15 15:01 ..
-rwxrwxr-x 1 krishna staff 10069 Mar 15 15:03 mvnw
-rw-rw-r-- 1 krishna staff 6607 Mar 15 15:03 mvnw.cmd
drwxr-xr-x 11 krishna staff 352 Mar 15 15:03 .
drwxr-xr-x 3 krishna staff 96 Mar 15 15:03 .mvn
Contents of .mvn folder is given below.
$ls .mvn/
wrapper
$
$ls .mvn/wrapper/
MavenWrapperDownloader.java maven-wrapper.jar maven-wrapper.properties
‘maven-wrapper.properties’ file contain the information about the maven distribution to be used to build this project.
$cat .mvn/wrapper/maven-wrapper.properties
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.0/apache-maven-3.6.0-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar
How to build the project?
Navigate to the project directory and execute the command ‘mvnw clean package’.
$./mvnw clean package
[INFO] Scanning for projects...
[INFO]
[INFO] -----------------< com.sample.app:wrapper-plugin-demo >-----------------
[INFO] Building wrapper-plugin-demo 1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ wrapper-plugin-demo ---
[INFO] Deleting /Users/krishna/eclipse-workspace/wrapper-plugin-demo/target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ wrapper-plugin-demo ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ wrapper-plugin-demo ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /Users/krishna/eclipse-workspace/wrapper-plugin-demo/target/classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ wrapper-plugin-demo ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ wrapper-plugin-demo ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ wrapper-plugin-demo ---
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ wrapper-plugin-demo ---
[INFO] Building jar: /Users/krishna/eclipse-workspace/wrapper-plugin-demo/target/wrapper-plugin-demo-1.jar
[INFO]
[INFO] --- maven-shade-plugin:2.4.3:shade (default) @ wrapper-plugin-demo ---
[INFO] Replacing original artifact with shaded artifact.
[INFO] Replacing /Users/krishna/eclipse-workspace/wrapper-plugin-demo/target/wrapper-plugin-demo-1.jar with /Users/krishna/eclipse-workspace/wrapper-plugin-demo/target/wrapper-plugin-demo-1-shaded.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.589 s
[INFO] Finished at: 2022-03-15T15:09:41+05:30
[INFO] ------------------------------------------------------------------------
You can download the complete working application from below link.
https://github.com/harikrishna553/java-libs/tree/master/maven-projects/wrapper-plugin-demo
References
https://maven.apache.org/wrapper/maven-wrapper-plugin/index.html
Previous Next Home
No comments:
Post a Comment