之前開發的java程式由於依賴比較多的jar包,啟動命令為” java -classpath .:lib/*.jar 主類名“,這種啟動方式需要指定類路徑、入口類名稱,並存在jar包缺失隱患。 現在利用SpringBoot的maven打包插件,可以將依賴的jar包都整理到一個jar文件中。 一、創建 ...
之前開發的java程式由於依賴比較多的jar包,啟動命令為” java -classpath .:lib/*.jar 主類名“,這種啟動方式需要指定類路徑、入口類名稱,並存在jar包缺失隱患。
現在利用SpringBoot的maven打包插件,可以將依賴的jar包都整理到一個jar文件中。
一、創建maven項目
名字隨便起。這裡叫ConfigClient。在pom.xml文件中使用如下插件。
指定mainClass,註意這個mainClass不是當前項目的類,是我們自己寫的程式的主類。
1 <plugin> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-maven-plugin</artifactId> 4 <configuration> 5 <mainClass>com.bonc.tool.Tool2</mainClass> 6 <layout>ZIP</layout> 7 </configuration> 8 <executions> 9 <execution> 10 <goals> 11 <goal>repackage</goal> 12 </goals> 13 </execution> 14 </executions> 15 </plugin>SpringBoot打包插件
二、打包
mvn package
三、進入到target中
1.解壓jar文件
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應用程式入口類
2.移動文件
如果我們寫的程式沒有打包為jar文件,這裡將它們放入 BOOT-INF/classes中
如果我們寫的程式已經打包為jar文件,這裡將jar文件以及依賴的所有jar包放入 BOOT-INF/lib中
3.不壓縮式打包
jar -cvfM0 ConfigClient.jar BOOT-INF META-INF org
-c表示create即創建新文件
-v表示列出verbose詳細信息
-f指定文件名字
-M不創建新的MANIFEST.MF
-0 不進行壓縮,僅將文件整理到一起。
這個0必須加上,表示不壓縮。因為內部jar包已經壓縮了,這裡再次壓縮,會造成內部jar無法讀取。
4.運行jar包
java -jar ConfigClient.jar
這時,一個可運行的jar包可以使用了。