如何制作一个 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 制作一个带有两个弹簧启动应用程序的胖罐子
SpringBoot - 制作 jar 文件 - 在 META-INF/spring.factories 中找不到自动配置类