META-INF目錄是幹啥用的?
平時寫的web專案打包成jar檔案之後會發現裡面不知道為啥多出了一個叫做META-INF的目錄,點開之後發現裡面還出現了一個manifest.mf檔案。出於好奇我在網上找了找這個目錄的用途,結果還是沒有找到一個比較通俗的解釋,我這種菜鳥對那種比較正規的解釋還是理解有困難的。
所以總結了一下,我感覺這樣解釋的話對於我們這些初學者來說還是比較容易理解的。
jar檔案
開發中可以直接使用java class檔案來執行程式,不過這樣不太方便,所以出現了jar檔案來提供釋出和執行,jar檔案實際上是class檔案的zip壓縮存檔,有很多工具都可以操縱這種格式的檔案,所以jar檔案本身並不能表達應用程式的便籤資訊。
META-INF目錄的出現
為了提供存檔的便籤資訊,出現了Manifest.mf檔案,jar檔案中有一個特定的目錄來存放標籤資訊:META-INF目錄,主要應關注其中
一個名叫manifest.mf的檔案,它包含了jar檔案的內容描述,在應用程式執行時向JVM提供應用程式的資訊。
關於MEATA-INF目錄的作用,百度上的解釋是這樣的(正規的解釋):
META-INF相當於一個資訊包,目錄中的檔案和目錄獲得Java 2平臺的認可與解釋,用來配置應用程式、擴充套件程式、類載入器和服務manifest.mf檔案,在用jar打包時自動生成。
jar檔案都有一個預設產生的META-INF目錄和其中的manifest.mf檔案 使用jar命令可以直接產生META-INF目錄和manifest.mf檔案,
Manifest-Version: 1.0
Built-By: Dxy
Created-By: IntelliJ IDEA
Build-Jdk: 1.8.0_144
其實這些資訊就是你jar檔案的描述資訊
Manifest-Version:生成的manifest.mf檔案的版本
Built-By:檔案的建立使用者命名,在IDEA的配置檔案中可以設定
Created-By:檔案的生成者,一般由jar命令列工具生成,這裡顯示的時idea
Bulid-Jdk:所使用的JDK環境
其實manifest.mf檔案中的配置資訊除了上面的四個之外,還是有很多的,以下是幾個常見的屬性:
一、一般屬性
1:Signature-Vresion:定義jar檔案的簽名版本
2:Class-Path:內部的類搜尋路徑,提供給應用程式或者類裝載器
二、應用程式的相關屬性
1、Main-Class:定義jar檔案的入口類,該類必須可執行!一旦定義了該屬性就可以使用
java -jar 程式名.jar 來執行該jar檔案
還有manifest.mf檔案的格式
manifest 檔案中的每一行都是 key-value 對應的:屬性名開頭,接著是 ":" ,然後是屬性值,每行最多72
個字元,如果需要增加,可以在下一行續行,續行以空格開頭,以空格開頭的行都會被視為前一行的續行。
總結一下:META-INF目錄實際上就是描述jar檔案中的資訊的一個目錄,目錄中除了manifest.mf檔案之外其實還是可以配置很多資訊檔案的,這些檔案都是在應用程式執行的過程中向其提供jar檔案的內容描述的。
僅限個人學習使用,錯誤在所難免。