I have a code base which I want to distribute as jar. It also have dependency on external jars, which I want to bundle in the final jar.
I heard that this can be done using maven-assembly-plug-in
, but I don't understand how. Could someone point me to some examples.
Right now, I'm using fat jar to bundle the final jar. I want to achieve the same thing using maven.
An alternative is to use the maven shade plugin to build an
uber-jar
.You can use the maven-shade-plugin.
After configuring the shade plugin in your build the command
mvn package
will create one single jar with all dependencies merged into it.Maybe you want
maven-shade-plugin
, bundle dependencies, minimize unused code and hide external dependencies to avoid conflicts.References:
actually, adding the
declaration to maven-jar-plugin does not add the main class entry to the manifest file for me. I had to add it to the maven-assembly-plugin in order to get that in the manifest
Note: If you are a spring-boot application, read the end of answer
Add following plugin to your
pom.xml
The latest version can be found at https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-assembly-pluginAfter configuring this plug-in, running
mvn package
will produce two jars: one containing just the project classes, and a second fat jar with all dependencies with the suffix "-jar-with-dependencies".if you want correct
classpath
setup at runtime then also add following pluginFor spring boot application use just following plugin (choose appropriate version of it)
You can use the onejar-maven-plugin for packaging. Basically, it assembles your project and its dependencies in as one jar, including not just your project jar file, but also all external dependencies as a "jar of jars", e.g.
Note 1: Configuration options is available at the project home page.
Note 2: For one reason or the other, the onejar-maven-plugin project is not published at Maven Central. However jolira.com tracks the original project and publishes it to with the groupId
com.jolira
.