So here's a quick walk through of a Maven project that will assemble into a runnable fat jar.
A Simple Class with a 'public static main' will be our Main-Class.
The Main-Class
package org.seekay.main;
import com.sun.jersey.api.core.ApplicationAdapter;
public class TestMain {
public static void main(String[] args) {
for(int i=0; i< 100; i++) {
System.err.println("Line "+ i);
}
ApplicationAdapter adapter = new ApplicationAdapter(null);
}
}
I've chosen a class at random from the Jersey-Server jar to be our external dependency to ensure that the external code is being packaged correctly.
The Pom
Including the 'maven-shade-plugin will cause all the dependencies listed in the pom to be unpacked into our fat jar.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
package
shade
The Main-Class
package org.seekay.main;
import com.sun.jersey.api.core.ApplicationAdapter;
public class TestMain {
public static void main(String[] args) {
for(int i=0; i< 100; i++) {
System.err.println("Line "+ i);
}
ApplicationAdapter adapter = new ApplicationAdapter(null);
}
}
I've chosen a class at random from the Jersey-Server jar to be our external dependency to ensure that the external code is being packaged correctly.
The Pom
Including the 'maven-shade-plugin will cause all the dependencies listed in the pom to be unpacked into our fat jar.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>org.seekay.main.TestMain</mainClass>
<finalName>${artifactId}-${version}</finalName>
</plugin>
To use a different main class, simply change the 'mainClass' attribute in the example above to be the fully qualified name of whichever class you'd like to use.
When you run 'maven clean install' your package will be built containing all the dependencies required by your project. Running 'java -jar UberJarTestProject-0.0.1-SNAPSHOT.jar' will invoke the main class and start the application. In our example a null pointer is thrown in the construction of the 'ApplicationAdapter' class, showing that it has been included.
Download Project