|
||||
|
-jar參數運行應用時classpath的設置方法 |
轉載請保留本文原始鏈接:http://www.zeali.net/blog/entry.php?id=15
你是否在使用java -jar參數運行打包好的jar應用程序的時候發現應用程序無法找到classpath下設置好的第三方類庫的內容?無論怎么設置classpath參數都無濟于事,總是會報ClassNotFound的錯誤?那么本篇帖子可以幫助你擺脫煩惱 :) 當用java -jar yourJarExe.jar來運行一個經過打包的應用程序的時候,你會發現如何設置-classpath參數應用程序都找不到相應的第三方類,報ClassNotFound錯誤。實際上這是由于當使用-jar參數運行的時候,java VM會屏蔽所有的外部classpath,而只以本身yourJarExe.jar的內部class作為類的尋找范圍。 **解決方案** 一 BootStrap class擴展方案 Java 命令行提供了如何擴展bootStrap 級別class的簡單方法. 語法如下: 二 extend class 擴展方案 Java exten class 存放在{Java_home}\jre\lib\ext目錄下.當調用Java時,對擴展class路徑的搜索是自動的.總會搜索的.這樣,解決的方案就很簡單了,將所有要使用的第三方的jar包都復制到ext 目錄下. 三 User class擴展方案 當使用-jar執行可執行Jar包時,JVM將Jar包所在目錄設置為codebase目錄,所有的class搜索都在這個目錄下開始.所以如果使用了其他第三方的jar包,一個比較可以接受的可配置方案,就是利用jar包的Manifest擴展機制. 1.將需要的第三方的jar包,復制在同可執行jar所在的目錄或某個子目錄下. 比如:jar 包在 /usrhome/yourJarExe.jar 那么你可以把所有jar包復制到/usrhome目錄下或/usrhome/lib 等類似的子目錄下. 2.修改Manifest 文件 在Manifest.mf文件里加入如下行 Class-Path:classes12.jar lib/thirdlib.jar Class-Path 是可執行jar包運行依賴的關鍵詞.詳細內容可以參考 http://java.sun.com/docs/books/tutorial/ext/index.html
Java的安全機制隨不同的JDK版本有不同的變化,會影響很多核心CLASS,比如Thread,所以很多大型商業軟件,要求JDK的版本很嚴格.部分原因也在此.這也要求在發布自己編寫的應用時候,不管大小,都要說明開發和測試的JDK版本.
---------------------------------------------------------------------------------------------- 附:背景知識 自JDK 1.2以后,JVM采用了委托(delegate)模式來載入class.采用這種設計的原因可以參考http://java.sun.com/docs/books/tutorial/ext/basics/load.html 歸納來講:是基于JVM sandbox(沙盒)安裝模型上提供應用層的可定制的安全機制.
1. Bootstrap classes 屬于Java 平臺核心的class,比如java.lang.String等.及rt.jar等重要的核心級別的class.這是由JVM Bootstrap class loader來載入的.一般是放置在{java_home}\jre\lib目錄下 2. Extension classes 基于Java擴展機制,用來擴展Java核心功能模塊.比如Java串口通訊模塊comm.jar.一般放置在{Java_home}\jre\lib\ext目錄下 3. User classes 開發人員或其他第三方開發的Java程序包.通過命令行的-classpath或-cp,或者通過設置CLASSPATH環境變量來引用.JVM通過放置在{java_home}\lib\tools.jar來尋找和調用用戶級的class.常用的javac也是通過調用tools.jar來尋找用戶指定的路徑來編譯Java源程序.這樣就引出了User class路徑搜索的順序或優先級別的問題. 3.1 缺省值:調用Java或javawa的當前路徑(.),是開發的class所存在的當前目錄 這也是為什么應用程序打包成可執行的jar包后,不管你怎么設置classpath都不能引用到第三方jar包的東西了. |
| |||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
---|---|---|---|---|---|---|---|---|---|
25 | 26 | 27 | 28 | 29 | 30 | 31 | |||
1 | 2 | 3 | 4 | 5 | 6 | 7 | |||
8 | 9 | 10 | 11 | 12 | 13 | 14 | |||
15 | 16 | 17 | 18 | 19 | 20 | 21 | |||
22 | 23 | 24 | 25 | 26 | 27 | 28 | |||
29 | 30 | 31 | 1 | 2 | 3 | 4 |
常用鏈接
留言簿(7)
隨筆檔案
搜索
最新評論

- 1.?re: [轉]在VC中徹底玩轉Excel
- 評論內容較長,點擊標題查看
- --Kerwin
- 2.?re: [轉]在VC中徹底玩轉Excel
- Range是抽象類怎么可以定義呢???
- --外文系
- 3.?re: [轉]在VC中徹底玩轉Excel
-
謝謝樓主,我有個問題是如何將一幅圖填入excel一個單元格中。
liu_shenglun@126.com - --lesheng
- 4.?re: 主題:三國十大帥哥
- 評論內容較長,點擊標題查看
- --魔獸私服
- 5.?re: [轉]在VC中徹底玩轉Excel
- 小說文筆灑脫靈秀,情節跌宕起伏,人物復雜逼真..
- --魔獸私服