SpringBoot項(xiàng)目可以直接打成jar包疤估,發(fā)布到服務(wù)器上,通過java -jar命令執(zhí)行霎冯,發(fā)布運(yùn)行一個(gè)服務(wù)端的項(xiàng)目非常方便铃拇。
那SpringBoot的jar包是如何運(yùn)行起來的呢?先手動(dòng)做一個(gè)可執(zhí)行的jar包吧
目錄結(jié)構(gòu)
image.png
程序代碼
package com.compile.demo.bean;
public class Student {
private String name;
public Student(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
package com.compile.demo;
import com.compile.demo.bean.Student;
import org.apache.commons.lang3.StringUtils;
public class Main {
public static void main(String[] args) {
String str = "Hello ";
Student s = new Student("zhangsan");
if (StringUtils.isNotEmpty(str)) {
System.out.println(str + s.getName());
} else {
System.out.println("為空!");
}
}
}
手動(dòng)編譯
- 執(zhí)行:
javac -encoding utf-8 -Djava.ext.dirs=libs -d classes src\com\compile\demo\*.java src\com\compile\demo\bean\*.java
- 當(dāng)前目錄結(jié)構(gòu):
image.png
手動(dòng)編譯的詳細(xì)過程請(qǐng)參照:手動(dòng)編譯及執(zhí)行java類(包含并引用第三方j(luò)ar)
打jar包
- 創(chuàng)建MANIFEST.MF文件
Manifest-Version: 1.0
Main-Class: com.compile.demo.Main
Class-Path: commons-lang3-3.4.jar
請(qǐng)務(wù)必在文件的最后一行沈撞,至少加一個(gè)回車換行
- Manifest-Version 版本號(hào)默認(rèn)為1.0
- Main-Class 入口的主類慷荔,也就是main方法所在的類
- Class-Path 引用外部類的路徑
-
再將手動(dòng)編譯的.class文件和引用的commons-lang3-3.4.jar移動(dòng)到與MANIFEST.MF同一個(gè)目錄下
image.png - 打包
在該文件夾下執(zhí)行:jar -cvfm compile.jar MANIFEST.MF com commons-lang3-3.4.jar
- jar命令是jdk自帶的,可在%JAVA_HOME%\bin中找到
- c 創(chuàng)建新檔案
- v 在標(biāo)準(zhǔn)輸出中生成詳細(xì)輸出缠俺,有輸出信息
- f 指定檔案文件名
- m 包含指定清單文件中的清單信息显晶,也就是指定我們的MANIFEST.MF 如果沒有這個(gè)參數(shù),會(huì)生成一個(gè)默認(rèn)的MANIFEST.MF文件
- compile.jar 指定生成jar包的名稱
-
MANIFEST.MF com commons-lang3-3.4.jar 要打包的文件
成功之后會(huì)在當(dāng)前文件夾下生成一個(gè)compile.jar
image.png
- 運(yùn)行
執(zhí)行:java -jar compile.jar
輸出結(jié)果:Hello zhangsan
jar包結(jié)構(gòu)
可借助IntelliJ IDEA來查看壹士,圖形化的結(jié)構(gòu)看起來更清晰
image.png
根目錄下是
- com 就是我們的.class文件
- commons-lang3-3.4.jar 依賴的外部jar包
-
META-INF 放著MANIFEST.MF磷雇,這個(gè)文件不可少,文件的內(nèi)容也不能隨意改動(dòng)
image.png
可以看出躏救,文件內(nèi)容與我們打包之前的基本沒有變化倦春,只是多了一個(gè)Created-By
執(zhí)行java -jar命令時(shí),就是根據(jù)Main-Class找到程序的入口,通過Class-Path找到依賴的外部jar包