Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

With Maven, how can I build a distributable that has my project's jar and all of the dependent jars?

Tags:

java

maven-2

I have a project (of type 'jar') that (obviously) builds a jar. But that project has many dependencies. I'd like Maven to build a "package" or "assembly" that contains my jar, all the dependent jars, and some scripts (to launch the application, etc.)

What's the best way to go about this? Specifically, what's the best way to get the dependents into the assembly?

like image 709
Jared Avatar asked Nov 24 '09 20:11

Jared


People also ask

Which Maven command creates an executable jar file with all dependencies of the project?

Use the maven-shade-plugin to package all dependencies into one über-JAR file. It can also be used to build an executable JAR file by specifying the main class.

Does jar contain all dependencies?

java is a main starting point which has main(String args[]) method inside. pom. xml file in which we will add Maven Plugins which will build executable . jar project with all included dependancies.

Which Maven command is used to create a jar?

4. mvn package. This command builds the maven project and packages them into a JAR, WAR, etc.


1 Answers

For a single module, I'd use an assembly looking like the following one (src/assembly/bin.xml):

<assembly>   <id>bin</id>   <formats>     <format>tar.gz</format>     <format>tar.bz2</format>     <format>zip</format>   </formats>   <dependencySets>     <dependencySet>       <unpack>false</unpack>       <scope>runtime</scope>       <outputDirectory>lib</outputDirectory>     </dependencySet>   </dependencySets>   <fileSets>     <fileSet>       <directory>src/main/command</directory>       <outputDirectory>bin</outputDirectory>       <includes>         <include>*.sh</include>         <include>*.bat</include>       </includes>     </fileSet>   </fileSets> </assembly> 

To use this assembly, add the following configuration to your pom.xml:

  <plugin>     <groupId>org.apache.maven.plugins</groupId>     <artifactId>maven-assembly-plugin</artifactId>     <configuration>       <descriptors>         <descriptor>src/assembly/bin.xml</descriptor>       </descriptors>     </configuration>     <executions>       <execution>         <phase>package</phase>         <goals>           <goal>single</goal>         </goals>       </execution>     </executions>   </plugin> 

In this sample, start/stop scripts located under src/main/command and are bundled into bin, dependencies are bundled into lib. Customize it to suit your needs.

like image 55
Pascal Thivent Avatar answered Sep 28 '22 04:09

Pascal Thivent