1. 程式人生 > >META-INF目錄是幹啥用的?

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檔案的內容描述的。

        僅限個人學習使用,錯誤在所難免。