2006年12月24日

          求助Axis 中文文檔

          求助Axis 中文文檔!請(qǐng)聯(lián)系我:zywmh1997@163.com
          posted @ 2007-03-28 16:48 小橋 流水 閱讀(836) | 評(píng)論 (0)編輯 收藏

          人生中十件無(wú)能為力的事

          人生中十件無(wú)能為力的事:????
          ??
          1. 倒向你的墻????
          ??
          2. 離你而去的人????
          ??
          3. 流逝的時(shí)間????

          ??
          4. 沒有選擇的出身????
          ??
          5. 莫名其妙的孤獨(dú)????
          ??
          6. 無(wú)可奈何的遺忘????
          ??
          7. 永遠(yuǎn)的過去????
          ??
          8. 別人的嘲笑????
          ??
          9. 不可避免的死亡????
          ??
          10. 不可救藥的喜歡??

          posted @ 2007-03-15 23:24 小橋 流水 閱讀(271) | 評(píng)論 (0)編輯 收藏

          -jar參數(shù)運(yùn)行應(yīng)用時(shí)classpath的設(shè)置方法

          轉(zhuǎn)載鏈接: http://www.zeali.net/entry/15
          你是否在使用java -jar參數(shù)運(yùn)行打包好的jar應(yīng)用程序的時(shí)候發(fā)現(xiàn)應(yīng)用程序無(wú)法找到classpath下設(shè)置好的第三方類庫(kù)的內(nèi)容?無(wú)論怎么設(shè)置classpath參數(shù)都無(wú)濟(jì)于事,總是會(huì)報(bào)ClassNotFound的錯(cuò)誤?那么本篇帖子可以幫助你擺脫煩惱 :)

          當(dāng)用java -jar yourJarExe.jar來(lái)運(yùn)行一個(gè)經(jīng)過打包的應(yīng)用程序的時(shí)候,你會(huì)發(fā)現(xiàn)如何設(shè)置-classpath參數(shù)應(yīng)用程序都找不到相應(yīng)的第三方類,報(bào)ClassNotFound錯(cuò)誤。實(shí)際上這是由于當(dāng)使用-jar參數(shù)運(yùn)行的時(shí)候,java VM會(huì)屏蔽所有的外部classpath,而只以本身yourJarExe.jar的內(nèi)部class作為類的尋找范圍。

          **解決方案**

          一 BootStrap class擴(kuò)展方案

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

          語(yǔ)法如下:
          ?(分隔符與classpath參數(shù)類似,unix使用:號(hào),windows使用;號(hào),這里以u(píng)nix為例)
          ?java -Xbootclasspath/a:/usrhome/thirdlib.jar: -jar yourJarExe.jar

          二 extend class 擴(kuò)展方案

          Java exten class 存放在{Java_home}\jre\lib\ext目錄下.當(dāng)調(diào)用Java時(shí),對(duì)擴(kuò)展class路徑的搜索是自動(dòng)的.總會(huì)搜索的.這樣,解決的方案就很簡(jiǎn)單了,將所有要使用的第三方的jar包都復(fù)制到ext 目錄下.

          三 User class擴(kuò)展方案

          當(dāng)使用-jar執(zhí)行可執(zhí)行Jar包時(shí),JVM將Jar包所在目錄設(shè)置為codebase目錄,所有的class搜索都在這個(gè)目錄下開始.所以如果使用了其他第三方的jar包,一個(gè)比較可以接受的可配置方案,就是利用jar包的Manifest擴(kuò)展機(jī)制.
          步驟如下:

          ?1.將需要的第三方的jar包,復(fù)制在同可執(zhí)行jar所在的目錄或某個(gè)子目錄下.?比如:jar 包在 /usrhome/yourJarExe.jar 那么你可以把所有jar包復(fù)制到/usrhome目錄下或/usrhome/lib 等類似的子目錄下.

          ?2.修改Manifest 文件

          ?在Manifest.mf文件里加入如下行

          ?Class-Path:classes12.jar lib/thirdlib.jar

          ?Class-Path 是可執(zhí)行jar包運(yùn)行依賴的關(guān)鍵詞.詳細(xì)內(nèi)容可以參考?http://java.sun.com/docs/books/tutorial/deployment/jar/downman.html?。要注意的是 Class-Path 只是作為你本地機(jī)器的CLASSPATH環(huán)境變量的一個(gè)縮寫,也就是說用這個(gè)前綴表示在你的jar包執(zhí)行機(jī)器上所有的CLASSPATH目錄下尋找相應(yīng)的第三方類/類庫(kù)。你并不能通過 Class-Path 來(lái)加載位于你本身的jar包里面(或者網(wǎng)絡(luò)上)的jar文件。因?yàn)閺睦碚撋蟻?lái)講,你的jar發(fā)布包不應(yīng)該再去包含其他的第三方類庫(kù)(而應(yīng)該通過使用說明來(lái)提醒用戶去獲取相應(yīng)的支持類庫(kù))。如果由于特殊需要必須把其他的第三方類庫(kù)(jar, zip, class等)直接打包在你自己的jar包里面一起發(fā)布,你就必須通過實(shí)現(xiàn)自定義的ClassLoader來(lái)按照自己的意圖加載這些第三方類庫(kù)。


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

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


          本文所述方法測(cè)試基于j2sdk 1.4.2_04-b05

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

          附:背景知識(shí)

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

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


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

          1. Bootstrap classes

          屬于Java 平臺(tái)核心的class,比如java.lang.String等.及rt.jar等重要的核心級(jí)別的class.這是由JVM Bootstrap class loader來(lái)載入的.一般是放置在{java_home}\jre\lib目錄下

          2. Extension classes

          基于Java擴(kuò)展機(jī)制,用來(lái)擴(kuò)展Java核心功能模塊.比如Java串口通訊模塊comm.jar.一般放置在{Java_home}\jre\lib\ext目錄下

          3. User classes

          開發(fā)人員或其他第三方開發(fā)的Java程序包.通過命令行的-classpath或-cp,或者通過設(shè)置CLASSPATH環(huán)境變量來(lái)引用.JVM通過放置在{java_home}\lib\tools.jar來(lái)尋找和調(diào)用用戶級(jí)的class.常用的javac也是通過調(diào)用tools.jar來(lái)尋找用戶指定的路徑來(lái)編譯Java源程序.這樣就引出了User class路徑搜索的順序或優(yōu)先級(jí)別的問題.

          ?3.1 缺省值:調(diào)用Java或javawa的當(dāng)前路徑(.),是開發(fā)的class所存在的當(dāng)前目錄
          ?3.2 CLASSPATH環(huán)境變量設(shè)置的路徑.如果設(shè)置了CLASSPATH,則CLASSPATH的值會(huì)覆蓋缺省值
          ?3.3 執(zhí)行Java的命令行-classpath或-cp的值,如果制定了這兩個(gè)命令行參數(shù)之一,它的值會(huì)覆蓋環(huán)境變量CLASSPATH的值
          ?3.4 -jar 選項(xiàng):如果通過java -jar 來(lái)運(yùn)行一個(gè)可執(zhí)行的jar包,這當(dāng)前jar包會(huì)覆蓋上面所有的值.換句話說,-jar 后面所跟的jar包的優(yōu)先級(jí)別最高,如果指定了-jar選項(xiàng),所有環(huán)境變量和命令行制定的搜索路徑都將被忽略.JVM APPClassloader將只會(huì)以jar包為搜索范圍.
          有關(guān)可執(zhí)行jar有許多相關(guān)的安全方面的描述,可以參考http://java.sun.com/docs/books/tutorial/jar/ 來(lái)全面了解.

          這也是為什么應(yīng)用程序打包成可執(zhí)行的jar包后,不管你怎么設(shè)置classpath都不能引用到第三方j(luò)ar包的東西了.

          posted @ 2007-02-09 09:59 小橋 流水 閱讀(657) | 評(píng)論 (0)編輯 收藏

          獲取MAC地址!

          怎樣用java獲取MAC地址?
          posted @ 2006-12-25 22:22 小橋 流水 閱讀(216) | 評(píng)論 (0)編輯 收藏

          hibernate遇到自增型的聯(lián)合主鍵該怎么辦?

          ????? 有一個(gè)組合主鍵,其中有一個(gè)主鍵是自增型的,象這樣的聯(lián)合主鍵,用hibernate能夠?qū)崿F(xiàn)嗎?
          posted @ 2006-12-24 16:49 小橋 流水 閱讀(727) | 評(píng)論 (1)編輯 收藏
          主站蜘蛛池模板: 衡水市| 志丹县| 平安县| 肃南| 松滋市| 康保县| 齐齐哈尔市| 汨罗市| 龙川县| 黄石市| 安吉县| 沭阳县| 江都市| 睢宁县| 河北省| 醴陵市| 巨鹿县| 南岸区| 永嘉县| 澎湖县| 衡山县| 临洮县| 遂昌县| 南充市| 新竹市| 当涂县| 泰宁县| 宝丰县| 库车县| 五大连池市| 茌平县| 峨山| 唐海县| 乐东| 镇坪县| 洛南县| 澄迈县| 东丰县| 皮山县| 资兴市| 全南县|