溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么解決運行jar包出錯ClassNotFoundException問題

發布時間:2021-12-07 11:33:58 來源:億速云 閱讀:360 作者:iii 欄目:開發技術

本篇內容主要講解“怎么解決運行jar包出錯ClassNotFoundException問題”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么解決運行jar包出錯ClassNotFoundException問題”吧!

Java命令運行jar 報錯

運行jar命令

java -jar xxx.jar

報錯:

Caused by: java.lang.ClassNotFoundException:

原因:要運行的jar缺少依賴包

執行jar正確命令:

java -Xbootclasspath/a:/home/webuser/gogoal_platform/ggopenapi/lib/snakeyaml.jar -jar xxx.jar

解釋:

  • -Xbootclasspath:完全取代系統Java classpath.最好不用。

  • -Xbootclasspath/a: 在系統class加載后加載。一般用這個。

  • -Xbootclasspath/p: 在系統class加載前加載,注意使用,和系統類沖突就不好了.

win32 java -Xbootclasspath/a: some.jar;some2.jar; -jar test.jar
unix java -Xbootclasspath/a: some.jar:some2.jar: -jar test.jar

win32系統每個jar用分號隔開,unix系統下用冒號隔開

方式二

AppClassloader來加載

這樣就不需要classpath參數了

我們在MANIFEST.MF中添加如下代碼:

Class-Path: lib/some.jar

lib是和test.jar同目錄的一個子目錄,test.jar要引用的some.jar包就在這里面。

(這里我剛開始理解成了把lib文件夾也打包進test.jar中,實踐后沒有成功,實際情況是lib和test.jar,是同一個目錄一個層次級別的)然后測試運行,一切正常!

如果有多個jar包需要引用的情況:

Class-Path: lib/some.jar lib/some2.jar

每個單獨的jar用空格隔開就可以了。注意使用相對路徑。

另:如果META-INF

下包含INDEX.LIST文件的話,可能會使Class-Path配置失效。INDEX.LIST是Jar打包工具打包時生成的索引文件,刪除對運行不產生影響。

jar包運行報錯:Invalid or corrupt jarfile

執行:

java -jar xxx.jar

運行一個jar包時,提示報錯:

Invalid or corrupt jarfile

該jar之前一直是正常運行的,這次只是增加了一項圖片處理功能,引入了opencv-2413.jar。除了class文件的變化之外,唯一的修改就是MANIFEST.MF文件了。分析來看,問題很可能就出在這個文件上,將該文件還原,果然,jar至少能啟動了。

不就是MANIFEST.MF文件中類路徑新添加了一個opencv嗎,為什么會這樣呢?

MANIFEST.MF是一個非常脆弱的文件,格式要求比較嚴格,一個空格、一個回車符,都可能會導致該文件失效,從而使得對應的jar包非法:Invalid or corrupt jarfile!

MANIFEST.MF格式要求

1. 文件中的內容以key-value鍵值對的形式出現,key和value之間采用"英文冒號+空格"進行分隔,注意:冒號后的空格必須有;key必須頂格寫,之前不能有空格。

2. 文件開頭不能有空行,并且文件總是以Manifest-Version屬性開頭。

3. 文件必須以一個空行結束,注意:該空行不能有任何字符,包括空格。

4. 每行最長72個字符,如果超過的話,采用續行,換行繼續必須以空格開頭。

5. 對于Class-Path屬性中的存在的路徑,使用"/"分隔目錄,與平臺無關;多個jar包引用以空格分開。

針對MANIFEST.MF文件每行不能超過72個字符的說法,還有疑問。因為我的MANIFEST.MF文件中,Class-Path屬性的很多行都是超過72個字符的,實際上并沒有引起異常。

怎么解決運行jar包出錯ClassNotFoundException問題

我的jar包之所以報錯,就是違背了以上的第3條,文件雖然以空行結束,但該空行隱藏了一個空格,也就是上圖中的第14行包含了一個空格。

到此,相信大家對“怎么解決運行jar包出錯ClassNotFoundException問題”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

jar
AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女