之前开发的 java 程序由于依赖比较多的 jar 包,启动命令为 "java -classpath .:lib/*.jar 主类名",这种启动方式需要指定类路径、入口类名称,并存在 jar 包缺失隐患。
现在利用 SpringBoot 的 maven 打包插件,可以将依赖的 jar 包都整理到一个 jar 文件中。
名字随便起。这里叫 ConfigClient。在 pom.xml 文件中使用如下插件。
指定 mainClass,注意这个 mainClass 不是当前项目的类,是我们自己写的程序的主类。
org.springframework.boot spring-boot-maven-plugin com.bonc.tool.Tool2 ZIP repackage
jar xf ConfigClient.jar
得到三个目录:
(1)org 应用入口类,负责加载校验 jar 包
(2)BOOT-INF 包含两个目录
lib classes, lib 用来存放所有被依赖的 jar 包,classes 是存放我们自己开发的程序
(3)META-INF 包含一个本文的中心文件 MANIFEST.MF 在启动 java 程序时会首先读取这个文件,来获得主类路径。
Manifest-Version: 1.0 Archiver-Version: Plexus Archiver Built-By: ChaseForFuture Start-Class: com.bonc.tool.Tool2 # pom文件所写的mainClass,在BOOT-INF/classes/中 Spring-Boot-Classes: BOOT-INF/classes/ # 我们自己写的所有程序 Spring-Boot-Lib: BOOT-INF/lib/ # 我们的程序依赖的jar包 Spring-Boot-Version: 1.5.9.RELEASE Created-By: Apache Maven 3.2.1 Build-Jdk: 1.8.0_131 Main-Class: org.springframework.boot.loader.PropertiesLauncher # java应用程序入口类
如果我们写的程序没有打包为 jar 文件,这里将它们放入 BOOT-INF/classes 中
如果我们写的程序已经打包为 jar 文件,这里将 jar 文件以及依赖的所有 jar 包放入 BOOT-INF/lib 中
jar - cvfM0 ConfigClient.jar BOOT - INF META - INF org
-c 表示 create 即创建新文件
-v 表示列出 verbose 详细信息
-f 指定文件名字
-M 不创建新的 MANIFEST.MF
-0 不进行压缩,仅将文件整理到一起。
这个 0 必须加上,表示不压缩。因为内部 jar 包已经压缩了,这里再次压缩,会造成内部 jar 无法读取。
java - jar ConfigClient.jar
这时,一个可运行的 jar 包可以使用了。
来源: http://www.bubuko.com/infodetail-2444964.html