Search code examples
javamavenexecutable-jarmaven-assembly-plugin

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


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?


Solution

  • 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>