如何制作一个 Maven 项目的“胖罐子”? [复制]

Posted

技术标签:

【中文标题】如何制作一个 Maven 项目的“胖罐子”? [复制]【英文标题】:How to make a "fat jar" of a Maven project? [duplicate] 【发布时间】:2016-12-29 13:47:52 【问题描述】:

使用 IntelliJ,我刚刚创建了一个新的 Maven 项目,并将以下内容添加到 pom 文件 http://undertow.io/downloads.html 中,并将以下内容添加到 Main.java 文件中 http://undertow.io/index.html

现在,如果我运行代码一切正常,但我如何将它作为一个“胖 jar”,它将包含 pom 文件中的所有依赖项,并且我将能够通过 java -jar my.jar 运行?就像您可以使用 Spring Boot 应用程序一样。

【问题讨论】:

这样做会清除组成库的清单,其中可能包含重要信息。 这与使用 maven 制作具有依赖关系的可执行 jar 有何不同。 ***.com/questions/574594/… 【参考方案1】:

Maven Shade Plugin 做得很好。

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-shade-plugin</artifactId>
      <version>2.4.3</version>
      <executions>
        <execution>
          <phase>package</phase>
          <goals>
            <goal>shade</goal>
          </goals>
          <configuration>
            <transformers>
              <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                <mainClass>package.Main</mainClass>
              </transformer>
            </transformers>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

【讨论】:

谢谢 - 这对我来说效果很好,但它似乎默认创建了两个 jars。我怎样才能只选择胖的? 另一个jar由maven-jar-plugin创建。第二个罐子真的挡住了你的路吗? 好吧,我觉得这有点令人困惑,并且很高兴有一个简单的开关“让胖罐子是/否” 我认为控制名称是您将获得的最佳效果。 ***.com/questions/4088701/… @J.Doe 你知道如何创建 1 个文件了吗???【参考方案2】:

1) 将Spring-boot-maven-plugin 添加到 pom.xml 文件中

 <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.4.0.RELEASE</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

2) 将包装改为jar

<packaging>jar</packaging>

3) mvn package 将创建可执行的 jar。

【讨论】:

我喜欢这个解决方案,但我认为你应该考虑编辑它以从插件中删除版本并让 pom 指定一个指向 spring-boot-start-parent 的父级。

以上是关于如何制作一个 Maven 项目的“胖罐子”? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

是否可以用@SpringBootApplication main 制作一个带有两个弹簧启动应用程序的胖罐子

SBT:如何 Dockerize 一个胖罐子?

尝试执行 fat jar 时出现“无主清单属性”

通过sbt使用java选项运行项目

SpringBoot - 制作 jar 文件 - 在 META-INF/spring.factories 中找不到自动配置类

如何在 Swift 中保存复选标记?