[英]Difference between Rsrc-Class-Path and Class-Path
有人能告訴我 runnable-jar 的 mannifest 文件的Rsrc-class-Path
和Class-Path
部分有什么區別嗎?
現在我認為它們是 Eclipse 生成的,但我想了解它是如何工作的。
根據 Eclipse 生成代碼的方式,我認為第一個是我的應用程序需要的 jars,第二個總是.
. 但我不知道是什么文件夾.
指的是。
Class-Path
屬性。 這是JAR 文件規范定義的標准屬性。 它包含一個相對 URL 列表,當您使用java -jar...
運行 JAR 時,這些 URL 將包含在運行時類路徑中。
這提供了一種將外部 JARs(和目錄)添加到運行時類路徑的方法。 條目必須是相對的,並且相對於包含主要 JAR 的目錄進行解析。(出於安全原因...)
Rsrc-class-Path
屬性是非標准的。 這是由 Eclipse 的“jars-in-jar”啟動器使用的。 典型的清單如下所示:
Manifest-Version: 1.0
Rsrc-Main-Class: com.abc.Master
Main-Class: com.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
Rsrc-Class-Path: ./ lib/xyz.jar
其中com.abc.Master
是您的應用程序(真實)主要 class,而lib/xyz.jar
是嵌套在此 JAR 中的 JAR 文件的相對 URL 。 您還將看到 JAR 包含JarRsrcLoader
的“.class”文件。 這就是您運行java -jar this.JAR arg1 arg2
時發生的情況。
Main-Class
/ 給出的JarRsrcLoader
classmain
方法,傳遞給它["arg1", "arg2"]
JarRsrcLoader
檢查清單,並提取Rsrc-Class-Path
和Rsrc-Main-Class
。JarRsrcLoader
創建一個特殊的類加載器,它知道如何讀取嵌入在當前 JAR 中的 JARs。這個類加載器的類路徑是“./”,后跟“lib/xyz.jar”,這些 URL在外部 JAR 文件中解析。JarRsrcLoader
使用特殊的 class 加載程序加載 class com.abc.Master
。JarRsrcLoader
調用 com.abc.Master 的main
方法,傳遞包含com.abc.Master
的相同字符串數組。 簡而言之, Rsrc-Class-Path
是JarRsrcLoader
class 理解的一個屬性,用於構建實際的應用程序類路徑。
在這種情況下, Class-Path: .
屬性沒有實際用途。 運行JarRsrcLoader
所需的一切都在 JAR 中。
最后要注意的是,SpringBoot 的加載機制是類似的,但它對應用程序的主 class 使用不同的非標准屬性,並將應用程序的資源(例如 JAR)放入特定目錄(“/boot-inf”)中主 JAR。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.