jar的MANIFEST.MF配置Class-Path, java -classpath設(shè)置無效的解決
jar的MANIFEST.MF配置Class-Path, java -classpath設(shè)置無效
比如說,
jar的MANIFEST.MF:
Manifest-Version: 1.0 Main-Class: office.Main Class-Path: .? ? ?../lib/graphics.jar
運(yùn)行:
java -classpath .;lib\video.jar -jar Office.jar
表面上看是對的,實(shí)際上因?yàn)閖ar中已經(jīng)包含了Class-Path,所以這樣的參數(shù)是無效的。吾怎么知道的?因?yàn)槲岜豢恿瞬胖馈?/p>
jar包下MANIFEST.MF中的 Class-Path 設(shè)置
1. 基本格式
- 屬性名稱+:+空格+屬性值
2. 沒行最多72個字符,換行繼續(xù)必須以空格開頭
3. 文件最后必須要有一個回車換行
4. Class-Path 當(dāng)前路徑是jar包所在目錄,如果要引用當(dāng)前目錄下一個子目錄中的jar包,使用以下格式
- 子目錄/xxx.jar 子目錄/yyy.jar
- 技巧:多個jar包的引用,可以使用 .classpath 文件中classpathentry 的值
5. 在任何平臺上路徑分割符都是 /,多個jar包引用以空格分開
Manifest-Version: 1.0 Agent-Class: com.ali.b2b.crm.dynamic.agent.MyAgentMain Main-Class: com.ali.b2b.crm.dynamic.agent.Dynamic Can-Redefine-Classes: true Can-Retransform-Classes: true Boot-Class-Path: javassist.jar Class-Path: lib/tools.jar lib/guava-r09.jar lib/guice-2.0.jar? ?lib/jakarta.commons.lang-2.2.jar lib/jakarta.commons.logging-0.0.0.jar lib/javassist.jar
jar包中MANIFEST.MF相關(guān)內(nèi)容
打包jar包的時候 ,有一個文件夾叫 META-INF/MANIFEST.MF 這個文件里保存一些該jar包的信息. 我們javaagent的相關(guān)信息也保存在這個文件中.
還有一個很重要的問題是里面有一個字段叫Class-Path 可以設(shè)置調(diào)用的jar包路徑, 改路徑可以寫相對路徑 , 也就是相對于該jar包的路徑
有多個jar包 可以用空格分開 每行內(nèi)容不能超過70字符
MANIFEST.MF文件可以由maven生成 , 需要在pom文件中設(shè)置
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.2.2</version> <configuration> <archive> <!--自動添加META-INF/MANIFEST.MF --> <manifest> <addClasspath>true</addClasspath> </manifest> <manifestEntries> <Premain-Class>org.agent.Agent</Premain-Class> <Can-Redefine-Classes>true</Can-Redefine-Classes> <Can-Retransform-Classes>true</Can-Retransform-Classes> <Class-Path>lib/javassist-3.9.0.jar</Class-Path> </manifestEntries> </archive> </configuration> </plugin> </plugins> </build>
生成的文件內(nèi)容如下:
Manifest-Version: 1.0 Premain-Class: org.agent.Agent Can-Redefine-Classes: true Can-Retransform-Classes: true Class-Path: lib/javassist-3.9.0.jar Build-Jdk-Spec: 1.8 Created-By: Maven JAR Plugin 3.2.2
參數(shù)介紹
Premain-Class
:包含 premain 方法的類(類的全路徑名)Agent-Class
:包含 agentmain 方法的類(類的全路徑名)Boot-Class-Path
:設(shè)置引導(dǎo)類加載器搜索的路徑列表。查找類的特定于平臺的機(jī)制失敗后,引導(dǎo)類加載器會搜索這些路徑。按列出的順序搜索路徑。列表中的路徑由一個或多個空格分開。路徑使用分層 URI 的路徑組件語法。如果該路徑以斜杠字符(“/”)開頭,則為絕對路徑,否則為相對路徑。相對路徑根據(jù)代理 JAR 文件的絕對路徑解析。忽略格式不正確的路徑和不存在的路徑。如果代理是在 VM 啟動之后某一時刻啟動的,則忽略不表示 JAR 文件的路徑。(可選)Can-Redefine-Classes
:true表示能重定義此代理所需的類,默認(rèn)值為 false(可選)Can-Retransform-Classes
:true 表示能重轉(zhuǎn)換此代理所需的類,默認(rèn)值為 false (可選)Can-Set-Native-Method-Prefix
: true表示能設(shè)置此代理所需的本機(jī)方法前綴,默認(rèn)值為 false(可選)
即在該文件中主要定義了程序運(yùn)行相關(guān)的配置信息,程序運(yùn)行前會先檢測該文件中的配置項(xiàng)。
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring?Boot?Security認(rèn)證之Redis緩存用戶信息詳解
本文介紹了如何使用Spring Boot Security進(jìn)行認(rèn)證,并通過Redis緩存用戶信息以提高系統(tǒng)性能,通過配置RedisUserDetailsManager,我們成功地將用戶信息存儲到了Redis中,并在Spring Security中進(jìn)行了集成,需要的朋友可以參考下2024-01-01Spring?Data?Jpa?復(fù)雜查詢方式總結(jié)(多表關(guān)聯(lián)及自定義分頁)
這篇文章主要介紹了Spring?Data?Jpa?復(fù)雜查詢方式總結(jié)(多表關(guān)聯(lián)及自定義分頁),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02SpringBoot整合Kaptcha實(shí)現(xiàn)圖形驗(yàn)證碼功能
這篇文章主要介紹了SpringBoot整合Kaptcha實(shí)現(xiàn)圖形驗(yàn)證碼功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-09-09springBoot整合CXF并實(shí)現(xiàn)用戶名密碼校驗(yàn)的方法
這篇文章主要介紹了springBoot整合CXF并實(shí)現(xiàn)用戶名密碼校驗(yàn)的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08SpringBoot實(shí)現(xiàn)PDF添加水印的示例
本文主要介紹了SpringBoot實(shí)現(xiàn)PDF添加水印的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05Spring?MVC中的Controller進(jìn)行單元測試的實(shí)現(xiàn)
本文主要介紹了如何對Spring?MVC中的Controller進(jìn)行單元測試的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02SpringBoot+minio+kkfile實(shí)現(xiàn)文件預(yù)覽功能
在現(xiàn)代的 Web 應(yīng)用中,文件預(yù)覽功能是提升用戶體驗(yàn)的重要部分,尤其是在文檔管理系統(tǒng)中,本文將帶你逐步實(shí)現(xiàn)如何在 Spring Boot 項(xiàng)目中集成 MinIO(一個對象存儲系統(tǒng))與 KKFileView(一個開源文件預(yù)覽工具),以實(shí)現(xiàn)對各種類型文件的在線預(yù)覽,需要的朋友可以參考下2024-12-12