Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Create multiple runnable Jars (with dependencies included) from a single Maven project [duplicate]

I have a single maven project that has multiple main classes. I want to generate runnable Jars (that include all dependencies) out of these project. I currently have the following build configuration (using maven.assembly):

<build> <plugins>     <plugin>         <artifactId>maven-assembly-plugin</artifactId>         <configuration>             <archive>                 <manifest>                     <mainClass>classpath.to.my.mainClass</mainClass>                 </manifest>             </archive>             <descriptorRefs>                 <descriptorRef>jar-with-dependencies</descriptorRef>             </descriptorRefs>         </configuration>     </plugin> </plugins> </build> 

Is their a way to achive this with maven-assembly? If not, what is the simplest way to achive my goal?

like image 695
Martin Thurau Avatar asked Jan 04 '12 12:01

Martin Thurau


2 Answers

You can do it. You'll need a separate execution for each artifact that you're building (i.e., give each its own id but you can leave the phase as default), and you'll need to specify the finalName and archive/manifest/mainClass for each.

<build> <plugins>     <plugin>         <artifactId>maven-assembly-plugin</artifactId>         <executions>           <execution>             <id>build-a</id>             <configuration>               <archive>                 <manifest>                   <mainClass>foobar.Aclass</mainClass>                 </manifest>               </archive>               <descriptorRefs>                 <descriptorRef>jar-with-dependencies</descriptorRef>               </descriptorRefs>               <finalName>foobar_a.jar</finalName>             </configuration>           </execution>           <execution>             <id>build-b</id>             <configuration>               <archive>                 <manifest>                   <mainClass>foobar.Bclass</mainClass>                 </manifest>               </archive>               <descriptorRefs>                 <descriptorRef>jar-with-dependencies</descriptorRef>               </descriptorRefs>               <finalName>foobar_b.jar</finalName>             </configuration>           </execution>         </executions>     </plugin> </plugins> </build> 
like image 166
Donal Fellows Avatar answered Oct 14 '22 08:10

Donal Fellows


I wasn't able to solve this problem with the maven-assembly-plugin in a satisfying way, so I went for a different solution. I used the onejar-maven-plugin:

<build>   <plugins>   <plugin>     <groupId>org.dstovall</groupId>     <artifactId>onejar-maven-plugin</artifactId>     <version>1.4.4</version>     <executions>       <execution>         <id>build-first</id>           <configuration>             <mainClass>classpath.to.first.Main</mainClass>             <attachToBuild>true</attachToBuild>             <classifier>onejar</classifier>             <filename>first-runnable.jar</filename>           </configuration>           <goals>             <goal>one-jar</goal>           </goals>         </execution>       <execution>         <id>build-second</id>           <configuration>             <mainClass>classpath.to.second.Main</mainClass>             <attachToBuild>true</attachToBuild>             <classifier>onejar</classifier>             <filename>second-runnable.jar</filename>           </configuration>           <goals>             <goal>one-jar</goal>           </goals>         </execution>       </executions>     </plugin>   </plugins> </build>  <pluginRepositories>   <pluginRepository>      <id>onejar-maven-plugin.googlecode.com</id>      <url>http://onejar-maven-plugin.googlecode.com/svn/mavenrepo</url>   </pluginRepository> </pluginRepositories> 
like image 26
Martin Thurau Avatar answered Oct 14 '22 07:10

Martin Thurau