Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Maven - Include dependent libs in jar without unpacking dependencies?

Tags:

We're trying to build a client jar that includes unpacked dependent jar's. And the manifest should have class-path entries to the dependent jars. The snippet below works but the jars are unpacked - how can we stop the jars from being unpacked?

       <plugin>             <artifactId>maven-assembly-plugin</artifactId>              <configuration>                 <descriptorRefs>                     <descriptorRef>jar-with-dependencies</descriptorRef>                 </descriptorRefs>                  <archive>                   <manifest>                     <addClasspath>true</addClasspath>                   </manifest>                 </archive>             </configuration>              <executions>                 <execution>                     <id>make-assembly</id>                     <phase>package</phase>                     <goals>                         <goal>single</goal>                     </goals>                 </execution>             </executions>         </plugin> 
like image 788
Marcus Leon Avatar asked Nov 18 '09 18:11

Marcus Leon


1 Answers

Indeed, assembling using jar-with-dependencies causes maven to unpack all the dependencies as ${assembly.dependencySets.dependency.unpack} is set to true in the corresponding assembly descriptor.

A simple fix would be to provide an assembly descriptor similar to the jar-with-dependencies.xml and modify ${assembly.dependencySets.dependency.unpack} to false, like this:

EDIT: For an unknown reason, the behavior when using <unpack>false</unpack> is not exactly the same and it seems necessary to add <outputDirectory>/</outputDirectory> to the fileSet or you don't get the expected result.

<assembly>   <id>uberjar</id>   <formats>     <format>jar</format>   </formats>   <includeBaseDirectory>false</includeBaseDirectory>   <dependencySets>     <dependencySet>       <unpack>false</unpack>       <scope>runtime</scope>     </dependencySet>   </dependencySets>   <fileSets>     <fileSet>       <directory>${project.build.outputDirectory}</directory>       <outputDirectory>/</outputDirectory>     </fileSet>   </fileSets> </assembly> 
like image 52
Pascal Thivent Avatar answered Oct 18 '22 19:10

Pascal Thivent