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

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

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

    BaNg@taobao

    Just Do It!

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      20 Posts :: -1 Stories :: 202 Comments :: 0 Trackbacks
    我平常做服務(wù)器或者應(yīng)用程序的時候喜歡把各種依賴包如log4j, jdbc, commons-lang等放到一個lib目錄下,然后啟動的時候?qū)⑦@些jar包設(shè)置到classpath上。以前我經(jīng)常使用set classpath=log4j.jar;jdbc.jar;commons-lang.jar硬加載,但問題就是每新加入一個jar,就得改批處理一次,再就是每開發(fā)一個就得這么設(shè)置一次。很煩人,perl 創(chuàng)始人說,偷懶的程序員才是好程序員:),我需要一個通用的加載方式。

    不管linux/windows或其它OS,都提供一個shell與kernel交互,并且shell都有一個類似的for內(nèi)置commnd。

    下面是linux bash的嘗試
    #!/usr/bin/sh

    clspath
    ="bootstrap.jar"
    for k in *.jar
    do
     clspath
    =$clspath:$PWD/$k
     echo 
    "current jar is $k."
    done
    printf "classpath is %s" $clspath

    工作的很好,于是在windows同樣try了一下batch
    @echo off

    set clspath
    =bootstrap.jar
    for %%j in (*.jar) do (
    set clspath
    =%clspath%;%cd%\%%j
    echo current jar is 
    %%j.
    )
    echo classpath is 
    %clspath%

    很奇怪的是最后的結(jié)果卻是 classpath is bootstrap.jar;D:\workflow\bingo\lib\servlet-api.jar。很顯然batch默認不支持變量迭代更改
    google了一下,發(fā)現(xiàn)原因,稍微改一下:
     
     1@echo off
     2
     3set clspath=bootstrap.jar
     4setlocal enabledelayedexpansion
     5for %%j in (*.jar) do (
     6set clspath=!clspath!;%cd%\%%j
     7echo current jar is %%j.
     8)
     9echo classpath is %clspath%
    10endlocal


    對比一下,可以發(fā)現(xiàn):

    1. 第4行加上了setlocal enabledelayedexpansion,即變量延遲展開。
    2. 第10行有一個endlocal,結(jié)束這個設(shè)置
    3. 第6行把%classpath%變成了!classpath!。

    雖然目的達到了,還是要鄙視微軟的dos batch,實在很弱,不知Powershell怎樣。

    參考資料:
       setlocal


     

    posted on 2008-04-13 15:32 Always BaNg. 閱讀(4523) 評論(8)  編輯  收藏 所屬分類: Java網(wǎng)摘備用

    Feedback

    # re: 在批處理中加載某個目錄所有的jar 2008-04-13 17:45 x.matthew
    其實通過設(shè)置可以加載一個目錄的,下面是一個例子
    java -Djava.ext.dirs="c:\lib" org.xmatthew.spy2servers.console.Main start  回復(fù)  更多評論
      

    # re: 在批處理中加載某個目錄所有的jar 2008-04-13 18:48 BeanSoft
    good!!!  回復(fù)  更多評論
      

    # re: 在批處理中加載某個目錄所有的jar 2008-04-13 22:21 和風細雨
    不錯。  回復(fù)  更多評論
      

    # re: 在批處理中加載某個目錄所有的jar 2008-04-13 22:44 luchunwei
    start javaw -cp bin;lib\*; MainClass  回復(fù)  更多評論
      

    # re: 在批處理中加載某個目錄所有的jar 2008-04-14 01:19 隔葉黃鶯
    java -Djava.ext.dirs="c:\lib" 這樣寫不錯的,就是假如有相同的 jar 包,但不同版本不知會出問題不,也破壞的類加載器的不同職責

    start javaw -cp bin;lib\*; 用通配符的形式要 jdk 6 才支持。

    還可這么寫的
    CLASSPATH=`find lib -name *.jar|xargs|sed "s/ /:/g"`
    CLASSPATH=".:$CLASSPATH"  回復(fù)  更多評論
      

    # re: 在批處理中加載某個目錄所有的jar 2008-04-14 10:43 Always BaNg.
    @x.matthew
    這種通過-Djava.ext.dirs="lib"的方式不錯,但ext的類加載器與app的加載器不一樣,跟classloader綁定的比如JNI library將會出現(xiàn)問題,所以只適合于你把自己的程序打到某個jar包放到lib目錄下,跟依賴包一起被ext classloader加載。

    @luchunwei
    這種方式很先進,學習了!


    @隔葉黃鶯
    原來在linux下只需要一句話,馬上改了,簡單才是美。  回復(fù)  更多評論
      

    # re: 在批處理中加載某個目錄所有的jar 2008-04-16 16:43 solo
    很有用,謝謝各位!  回復(fù)  更多評論
      

    # re: 在批處理中加載某個目錄所有的jar[未登錄] 2008-06-09 00:38 菜鳥
    Windows里面可以用JSscript或VBSscript,跟LINUX的SHELL差不多強大,語法和WEB里面的一樣,但是有很多現(xiàn)成對象,例如FileSystemObject可用  回復(fù)  更多評論
      

    主站蜘蛛池模板: 久久久婷婷五月亚洲97号色| 亚洲国产精品综合久久久| 亚洲男女性高爱潮网站| 337P日本欧洲亚洲大胆精品| 免费黄网站在线看| 日韩在线看片免费人成视频播放| 亚洲人成人77777网站| 亚洲中文精品久久久久久不卡| 中文字字幕在线高清免费电影| 成人免费午夜无码视频| 国产亚洲精品成人a v小说| 亚洲六月丁香六月婷婷蜜芽| 一区视频免费观看| 久久WWW免费人成人片| 亚洲精品无码久久久久sm| 亚洲精品女同中文字幕| 无码国产精品一区二区免费16| 国产乱子影视频上线免费观看| 久久精品a亚洲国产v高清不卡| 羞羞网站在线免费观看| 日韩欧美一区二区三区免费观看| 亚洲日韩欧洲无码av夜夜摸| 亚洲国产欧美日韩精品一区二区三区 | 人人公开免费超级碰碰碰视频| 久久国产高潮流白浆免费观看| 亚洲AⅤ永久无码精品AA| 亚洲三级视频在线观看| 黄色网站软件app在线观看免费| 宅男666在线永久免费观看| 亚洲视频在线不卡| 国产一区二区三区免费观在线| 无码国模国产在线观看免费| 亚洲精品亚洲人成在线麻豆| 国产精品免费久久久久久久久| 日本免费一区二区三区最新vr| 亚洲H在线播放在线观看H| 久久免费的精品国产V∧| 国产成人综合亚洲亚洲国产第一页| 亚洲国产成人AV在线播放| 无码国产精品一区二区免费式直播| 国产亚洲精品自在久久|