小编典典

从单个Maven项目创建多个可运行的Jar(包括依赖项)

javascript java

我有一个具有多个主类的maven项目。我想从这些项目中生成可运行的Jar(包括所有依赖项)。我目前有以下构建配置(使用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>

他们是否可以通过Maven-assembly实现这一目标?如果没有,实现目标的最简单方法是什么?


阅读 298

收藏
2020-09-11

共2个答案

小编典典

我无法以maven-assembly-plugin令人满意的方式解决此问题,因此我选择了其他解决方案。我使用了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>
2020-09-11
小编典典

你能行的。你需要一个单独的执行对于每一个工件,你建设(即给每个自己的ID,但你可以离开的阶段为默认值),你就需要指定finalName和存档/清单/ mainClass 每个。

<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>
2020-09-11