一、metainfo是什麼
在編寫Java應用程序時,meta-inf文件夾是一個特殊的文件夾,用來存放關於應用程序打包信息的元數據。這些元數據以文本文件的形式存儲在該文件夾下。一般情況下,這個文件夾存儲的都是定義Java程序打包配置的文件,例如MANIFEST.MF和INDEX.LIST等。
二、meta-inf是什麼文件夾
meta-inf文件夾是一個Java固定的文件夾,一般放置在JAR包的根目錄下。其中META-INF文件夾是可以任意命名的,但其中的所有文件都必須按照規定的格式進行命名。在META-INF文件夾中的文件,主要用於描述Java包文件的一些屬性信息與配置信息,例如包名、版本號、Class-Path等信息。
除了MANIFEST.MF和INDEX.LIST,META-INF文件夾中的其他文件對於Java程序來說並不是必須的。但是,如果想在Java中使用服務自動載入機制,就需要在META-INF/services文件夾中為每個需要自動載入的服務提供配置。
三、MANIFEST.MF
MANIFEST.MF是Java中的一個配置文件,它是Java項目打包過程中很重要的一部分。MANIFEST.MF文件包含了一系列關於該JAR包的元信息,例如應用名稱、版本、製作者、類路徑、擴展包、構建時間、入口類等,可以說MANIFEST.MF文件是JAR包的核心描述文件。
Manifest-Version: 1.0 Class-Path: lib/abc.jar lib/def.jar Created-By: 1.7.0_06 (Oracle Corporation) Main-Class: com.demo.MainClass
上面是一個MANIFEST.MF文件的示例。其中,Manifest-Version是必須的,指定這個 manifest 文件的版本,且必須是1.0。Class-Path是一個可選項,指定了該JAR包下的所有依賴包路徑。Created-By則是記錄了該JAR包的創建者與JDK版本。而Main-Class是必須項,是帶有main()函數的類名,就是程序的主類。
四、INDEX.LIST
INDEX.LIST是JAR文件索引,它存儲了該JAR文件中的所有文件列表,以及它們所在的位置。當Java程序需要讀取某個JAR文件中的一個或多個類時,Java虛擬機需要通過該文件索引來查找被請求的類。
INDEX.LIST文件是一個可選項。一些打包工具像Maven在對JAR文件進行打包時,會自動將索引文件打包在META-INF目錄下。但是,一些工具和手動打包式並不包含此文件。
五、其他META-INF下的文件
除了MANIFEST.MF和INDEX.LIST以外的其他文件可以在META-INF文件夾下面,比如我們可以在META-INF目錄下創建一個 LICENSE.txt 文件,用來存儲開源軟體的許可證信息。
六、示例代碼
下面是一個簡單的MANIFEST.MF文件示例,用來描述Java程序的一些基本配置信息:
Manifest-Version: 1.0 Main-Class: com.example.MainClass Class-Path: lib/abc.jar lib/def.jar
這個文件中定義了:
- Manifest-Version:這個JAR包的manifest文件版本。
- Main-Class:指定了這個JAR包運行時的主類。
- Class-Path:指定了這個JAR包的classpath,這裡指定了兩個jar包。
下面是一個示例代碼,會產生一個包含META-INF MANIFEST.MF的jar包:
mkdir -p classes cd classes echo "com.demo.MainClass" > mainClass echo "Hello, World!" > com/demo/HelloWorld.class jar cvfm ../HelloWorld.jar META-INF/MANIFEST.MF mainClass com
在上面的示例代碼中,首先創建一個名為classes的文件夾,該文件夾下包含兩個普通文件,一個是用於說明jar包的主類,一個是HelloWorld類的class文件。
接著,我們使用jar命令創建一個JAR包,並指定包含要打包的文件夾、MANIFEST.mf文件的路徑、以及主類。最後一步,我們將上面創建的HelloWorld.jar文件展開,通過jar命令中的tv參數查看JAR包的內容,可以看到META-INF/MANIFEST.MF文件和class文件已經打包進了JAR包中。
unzip -p HelloWorld.jar META-INF/MANIFEST.MF unzip -p HelloWorld.jar com/demo/HelloWorld.class
在上面的示例代碼中,我們使用unzip命令解壓HelloWorld.jar JAR包,並通過-p參數指定只查看指定文件的內容。
七、小結
上文從metainfo、meta-inf是什麼文件夾、manifest、INDEX.LIST、其他META-INF下的文件五個方面對meta-inf進行了詳細的講解,並給出了一些示例代碼。通過這些內容的闡述,讀者可以深刻地了解到META-INF的作用和重要性,以及JAR包的打包過程和一些配置文件的寫法。
原創文章,作者:BIIR,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/144100.html