提问者:小点点

Maven-在同一个模块中生成战争和脂肪jar


我需要在同一个pom中生成战争和脂肪jar(jar所有依赖项)。
我在这个网站上发现了许多类似的线程,但仍然有一个问题。

在我的pom中,我将打包设置为war并添加maven-war-plugin和maven-汇编插件:

...
<packaging>war</packaging>
....
<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.6</version>
    <configuration>
    </configuration>
  </plugin>
  <plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2-beta-5</version>
    <configuration>
      <descriptorRefs>
        <descriptorRef>jar-with-dependencies</descriptorRef>
      </descriptorRefs>
      <appendAssemblyId>false</appendAssemblyId>
    </configuration>
    <executions>
      <execution>
        <id>make-my-jar-with-dependencies</id>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
  .... 

注意使用的maven-汇编插件版本-2.2-beta-5。在我的测试中,它是唯一在此配置中生成正确jar文件的版本。不幸的是,它还打印了许多“[INFO]已经添加,跳过”行,构建过程花费了太多时间。

如果我使用最新版本的maven-汇编插件(2.6),没有“已经添加”的信息打印和构建至少快3倍,但与2.2版本不同,我所有的类文件都放在 /WEB-INF/classes/文件夹中(应该在root中),所以我可以从这个jar运行任何主类。所有来自依赖罐子的类都按预期放在root中。

最新版本中是否有任何插件配置参数可以帮助生成正确的jar?


共1个答案

匿名用户

您不必从根位置的依赖项中获取所有类。让程序集插件发挥其神奇作用。就运行主类而言,除了您已经拥有的代码之外,您还可以使用以下代码。

<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.6</version>
        <configuration>
          [...]
          <archive>
            <manifest>
              <mainClass>org.sample.App</mainClass>    // specify your main class here.
            </manifest>
          </archive>
        </configuration>
        [...]
      </plugin>
      [...]
</project>