<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Eclipse發布程序

    辛辛苦苦在Eclipse里面寫好東西,不會發布,網絡上搜到的大多都是關于MyEclipse發布web方式。不過也難怪人家不寫,因為是在比較簡單。只要直接導出Jar文件就可以了,是在沒什么可以寫的,都怪灑家太笨了。
    不過導出后遇到一些問題,就是第三方jar文件錯誤,這個找了一下,同樣在BlogJava上有人發表了方法,他推薦的是第一種方法,灑家用的是第二種。原文見http://www.tkk7.com/mimi-van/archive/2007/11/28/163597.html
    為了自己閱讀方便,也粘貼一份吧。失敬,失敬!

    我存檔的一篇java資料,里面對 -jar 情況下的classpath 有了比較詳細的闡述。

    當用java -jar yourJarExe.jar來運行一個經過打包的應用程序的時候,你會發現如何設置-classpath參數應用程序都找不到相應的第三方類,報 ClassNotFound錯誤。實際上這是由于當使用-jar參數運行的時候,java VM會屏蔽所有的外部classpath,而只以本身yourJarExe.jar的內部class作為類的尋找范圍。

    **解決方案**

    一 BootStrap class擴展方案

    Java 命令行提供了如何擴展bootStrap 級別class的簡單方法.
    -Xbootclasspath:     完全取代基本核心的Java class 搜索路徑.
                                       不常用,否則要重新寫所有Java 核心class
    -Xbootclasspath/a: 后綴在核心class搜索路徑后面.常用!!
    -Xbootclasspath/p: 前綴在核心class搜索路徑前面.不常用,避免
                                       引起不必要的沖突.

    語法如下:
     (分隔符與classpath參數類似,unix使用:號,windows使用;號,這里以unix為例)
     java -Xbootclasspath/a:/usrhome/thirdlib.jar: -jar yourJarExe.jar

    二 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/deployment/jar/downman.html 。 要注意的是 Class-Path 只是作為你本地機器的CLASSPATH環境變量的一個縮寫,也就是說用這個前綴表示在你的jar包執行機器上所有的CLASSPATH目錄下尋找相應的 第三方類/類庫。你并不能通過 Class-Path 來加載位于你本身的jar包里面(或者網絡上)的jar文件。因為從理論上來講,你的jar發布包不應該再去包含其他的第三方類庫(而應該通過使用說明來 提醒用戶去獲取相應的支持類庫)。如果由于特殊需要必須把其他的第三方類庫(jar, zip, class等)直接打包在你自己的jar包里面一起發布,你就必須通過實現自定義的ClassLoader來按照自己的意圖加載這些第三方類庫。


    以上三種方法推薦第一種,擴展性好,操作起來也最方便.
    另外編寫自己的ClassLoader,來動態載入class,是更加復雜和高級技術.限于篇幅,不贅述.有興趣了解可以去google一下custom classloader,或者參考我的另一篇日志:讓classpath參數走開

    Java的安全機制隨不同的JDK版本有不同的變化,會影響很多核心CLASS,比如Thread,所以很多大型商業軟件,要求JDK的版本很嚴格.部分原因也在此.這也要求在發布自己編寫的應用時候,不管大小,都要說明開發和測試的JDK版本.


    本文所述方法測試基于j2sdk 1.4.2_04-b05

    ----------------------------------------------------------------------------------------------

    附:背景知識

    自JDK 1.2以后,JVM采用了委托(delegate)模式來載入class.采用這種設計的原因可以參考http://java.sun.com/docs/books/tutorial/ext/basics/load.html

    歸納來講:是基于JVM sandbox(沙盒)安裝模型上提供應用層的可定制的安全機制.


    Java虛擬機(JVM)尋找Class的順序

    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所存在的當前目錄
     3.2 CLASSPATH環境變量設置的路徑.如果設置了CLASSPATH,則CLASSPATH的值會覆蓋缺省值
     3.3 執行Java的命令行-classpath或-cp的值,如果制定了這兩個命令行參數之一,它的值會覆蓋環境變量CLASSPATH的值
     3.4 -jar 選項:如果通過java -jar 來運行一個可執行的jar包,這當前jar包會覆蓋上面所有的值.換句話說,-jar 后面所跟的jar包的優先級別最高,如果指定了-jar選項,所有環境變量和命令行制定的搜索路徑都將被忽略.JVM APPClassloader將只會以jar包為搜索范圍.
    有關可執行jar有許多相關的安全方面的描述,可以參考http://java.sun.com/docs/books/tutorial/jar/ 來全面了解.

    這也是為什么應用程序打包成可執行的jar包后,不管你怎么設置classpath都不能引用到第三方jar包的東西了

    關于 什么是 jar文件可以參看以下鏈接:

    http://www-128.ibm.com/developerworks/cn/java/j-jar/index.html


    灑家測試的環境是:Ubuntu8.04+jdk 1.6+Eclipse 3.2。

    posted on 2008-07-24 16:19 SeesSea 閱讀(2844) 評論(0)  編輯  收藏 所屬分類: JAVA

    <2008年7月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    導航

    統計

    常用鏈接

    留言簿(2)

    隨筆分類

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲视频无码高清在线| 日本一道一区二区免费看| 亚洲日韩中文字幕天堂不卡| 中文字幕无码成人免费视频| 亚洲爆乳无码一区二区三区| 成人a毛片免费视频观看| 成人免费看片又大又黄| 七次郎成人免费线路视频| 亚洲精品岛国片在线观看| 日本卡1卡2卡三卡免费| 亚洲丁香色婷婷综合欲色啪| 成年女人18级毛片毛片免费观看| 人妻巨大乳hd免费看| 亚洲一区二区久久| 国产91精品一区二区麻豆亚洲| 日本zzzzwww大片免费| 好猛好深好爽好硬免费视频| 亚洲AV无码精品蜜桃| 国产亚洲成av片在线观看| 韩国二级毛片免费播放| 午夜精品免费在线观看| 色老头综合免费视频| 亚洲一卡2卡3卡4卡国产网站| 亚洲自偷自偷在线制服 | 182tv免费视频在线观看 | 在线看片v免费观看视频777| 国产精品免费αv视频| 亚洲爆乳无码专区www| 亚洲白色白色在线播放| 国精无码欧精品亚洲一区| 免费国产人做人视频在线观看| 真人做A免费观看| 久久久久成人片免费观看蜜芽| 日韩毛片在线免费观看| 亚洲欧美熟妇综合久久久久| 亚洲美女自拍视频| 亚洲第一AV网站| 亚洲精品无码mv在线观看网站| 国产在线观看免费视频播放器| 国产精品久久久久免费a∨| 久久久久成人精品免费播放动漫|