请问, Java 如何打出自带依赖的 jar 包?

2021-09-22 18:53:20 +08:00
 nanmu42

各位好,我想请教,Java 如何打出自带依赖的 jar 包?就是那种拷贝 jar 包到干净的 OpenJDK 环境下就直接可运行的那种?

我现在是依赖 IDEA 的 build artifacts 功能,但是找不到对应的命令行命令,我想在 CI 里完成这件事情。

我使用的是 Java 8 和 Maven.

感谢。

3080 次点击
所在节点    Java
10 条回复
billlee
2021-09-22 18:58:49 +08:00
maven shade plugin
sutra
2021-09-22 19:03:37 +08:00
AllenHua
2021-09-22 19:11:39 +08:00
https://hellodk.cn/post/727

```
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<!-- 运行 jar 包时运行的主类,要求写全类名 需要包含 package name -->
<mainClass>MainService</mainClass>
<!-- 是否指定项目 classpath 下的依赖 -->
<addClasspath>true</addClasspath>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
```
ztcaoll222
2021-09-22 19:36:06 +08:00
关键词:fat jar
Jooooooooo
2021-09-22 23:20:20 +08:00
感觉你想要的是 fat jar

包含所有的东西
cslive
2021-09-23 09:13:43 +08:00
springboot 用 spring-boot-maven-plugin 这个插件,不带容器的 java 非 java ee 项目需要自己写配置文件,指定 main 方法才行
monkeydream
2021-09-23 17:31:26 +08:00
maven-assembly-plugin 插件了解一下
nanmu42
2021-09-24 13:13:36 +08:00
感谢各位的分享,综合意见,最后我使用了 Maven Shade Plugin,目前状态不错。

https://maven.apache.org/plugins/maven-shade-plugin/examples/includes-excludes.html
Muyiafan
2021-09-24 13:35:41 +08:00
如果用的是 gradle 构建工具的话。
```
gradle assemble
```
wucao219101
2021-09-24 14:31:34 +08:00
maven-assembly-plugin / maven-shade-plugin 二选一,如果是 Spring 项目推荐用 maven-shade-plugin 。

https://xxgblog.com/2015/08/07/maven-create-executable-jar/

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/803460

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX