Executable jar
/**
* MAVEN BUILD - EXECUTABLE (FAT JAR)
* ----------------------------------
* This example demonstrates how to build a FAT jar using Maven.
*
* A fat JAR:
* ----------
* - Contains application classes
* - Contains ALL external dependencies
* - can be executed directly wiht java -jar
*
* KEY MAVEN COMMANDS:
* -------------------
* mvn dependency:tree
* mvn versions:display-dependency-updates
*
* EXTERNAL LIBERY USED:
* ---------------------
* Apache Common Lang (StringUtils)
*/
package demo;
import org.apache.commons.lang3.StringUtils;
public class HelloWorld {
public static void main(String[] args) {
String text = "hello maven";
String result = StringUtils.capitalize(text);
System.out.println(result);
// Hello maven
}
}
Pom
<?xml version="1.0" encoding="UTF-8"?>
<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>demo</groupId>
<artifactId>executable-jar</artifactId>
<version>1.0</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- External library -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.20.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- Creates a FAT (uber) JAR -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.5.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
<transformers>
<transformer implementation=
"org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>demo.HelloWorld</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>