前言
終於等來了假期,也終於等來了團隊學習,考試周來的時候真的很慌張,不只是因為考試,更是因為團隊學習的中斷,學習就應該一鼓作氣,趁着精力旺盛,也趁着自己興趣在這,復習的時候就怕玩游戲,小游戲也不行,畢竟比起學習來,游戲要有很大的吸引力,對於團隊學習來說,復習周就相當於休息,一旦時間過長,就容易被轉移注意力,好在現在回到正軌了。
最近潘老師在Alice的項目上提交了一個這樣的issue:
然后來到研究生考試系統看一下這個文件:
有一說一,沒看懂,但是我感興趣的是jar包,之前在團隊匯報時就聽說過這個名詞,但是沒有接觸過,也不知道是啥,然后就試着打包和運行項目
打包
首先在POM.XML文件中要有插件:spring-boot-maven-plugin
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
然后就是進入POM.XML文件所在的目錄,然后執行語句:
mvn clean package -Dmaven.test.skip=true
最后會出現
BUILD SUCCESS 字樣,說明打包成功,然后在target文件中會生成jar包
由圖標樣式我們可以知道,所謂的jar包就是壓縮包。
當然也可以使用命令:
mvn clean package
使用該命令后會進行測試,成功后打包文件。
運行項目
想要把項目運行起來,只需要一句:
java -jar alice-0.0.1-SNAPSHOT.jar
(后面的jar包請根據自己系統生成的jar包名稱填寫)
jar包
JAR 文件的全稱 Java Archive File(Java 檔案文件),通常 JAR 文件是一種壓縮格式,和 ZIP 格式兼容,與 ZIP格式不同的是它 包含了一個名為 META-INF/MANIFEST.MF的清單文件
解壓jar包看一下它的結構:
(現場演示)
MANIFEST.MF文件中有如下內容:
Manifest-Version: 1.0 Implementation-Title: alice Implementation-Version: 0.0.1-SNAPSHOT Built-By: jincheng Implementation-Vendor-Id: com.yunzhiclub Created-By: Apache Maven 3.6.0 Build-Jdk: 1.8.0_172 Implementation-URL: ot-starter-parent/alice
關於創建者和版本號等信息。
打開實體文件,發現里面有如下文件:
結尾后綴均為.class
.class
Java字節碼類文件(.class)是Java編譯器編譯Java源文件(.java)產生的“目標文件”。它是一種8位字節的二進制流文件, 各個數據項按順序緊密的從前向后排列, 相鄰的項之間沒有間隙, 這樣可以使得class文件非常緊湊, 體積輕巧, 可以被JVM快速的加載至內存, 並且占據較少的內存空間(方便於網絡的傳輸)。
用jd-gui反向解析一下.class文件:
通過圖標我們可以知道,正如上面說的,.class文件是二進制文件,變量和類型放在前面,方法放在后面
我們看一下College.class存放的東西:
javap -v College.class
javap命令主要用於反編譯java的class文件
查看.class文件存放的二進制流信息並且了解他們的含義,請參考此博客:
深入理解JVM之Java字節碼(.class)文件詳解
總結
打包時,項目的.java文件經過編譯器編譯后生成.class文件,然后被打成壓縮包,即jar包,當執行java -jar XXX.jar 命令時,java虛擬機再根據.class文件的內容進行編譯。
