在命令行中運行eclipse中建立的java項目

因爲項目要求,須要對eclipse中的項目進行打包,似的能夠在客戶機上不裝eclipse的狀況下正常運行。
一.環境說明:
   eclipse---3.5
   jdk-------1.6.0.22
   os--------xp,win7
二.解決方案詳情:
   1. 項目不引用外部jar包,僅僅依賴於jdk相關jar包,則有兩種解決方案
     方案1、經過eclipse/myeclipse-->export-->java-->runnable JAR File,
           按照提示選擇Main方法,再下一步,最終生成jar文件;在cmd命令行下執行
             java -jar XXX.jar便可

     方案2、仍是經過eclipse/myeclipse工具導出,可是不是導出jar文件,而是導出
             包結構及class文件:export-->File System-->在這一步選擇要導出的類
             以及項目的配置文件還有lib目錄(也就是項目須要的jar包)(這是關鍵的一 
             步,導出類時由於eclipse/myeclipse默認編譯後的class文件在bin/包
             路徑/class文件,這裏導出時不須要bin這個文件夾,把包路徑和包下的
             class文件一塊兒導出。最後還應注意,好比咱們的項目包都是以 
             com.project.xxx報下,而程序入口的main文件在
             com.project.main包下,則cmd中執行java命令時應該進入到com包所在的
             目錄下,好比在classes目錄下則cd classes,執行命令以下:
             java com.project.main.Main
   2. 項目引用第三方jar包,而且須要在啓動時讀取配置文件            
             仍是經過eclipse/myeclipse工具導出,可是不是導出jar文件,而是導出
             包結構及class文件:export-->File System-->在這一步選擇要導出的類
             以及項目的配置文件還有lib目錄(也就是項目須要的jar包)(這是關鍵的一 
             步,導出類時由於eclipse/myeclipse默認編譯後的class文件在bin/包
             路徑/class文件,這裏導出時不須要bin這個文件夾,把包路徑和包下的
             class文件一塊兒導出,並保證和配置文件目錄即lib目錄同級,不這麼作的話
             在cmd命令下執行java 類名命令時會java.lang.NoClassDefFoundError
             錯誤,即便代碼沒有任何問題的狀況下也會報該異常)。最後還應注意,好比我
             們的項目包都是以com.project.xxx報下,而程序入口的main文件在
             com.project.main包下,則cmd中執行java命令時應該進入到com包所在的
             目錄下,好比在classes目錄下則cd classes,執行命令以下:
             java -Djava.ext.dirs=./lib com.project.main.Main
           其中-D參數表示加載項目所須要的jar包即lib下全部*.jar
           注意:加入配置文件在項目根目錄/conf/目錄下,那麼就必須把conf文件夾
                   放在和com包同一個目錄下,並在代碼中以conf/XXX來讀取配置文件即
                   可
   3. 補充說明
     這裏說明下爲何在項目有配置文件的時候沒什麼沒有采用打jar包形式來導出項目。
      由於若是採用打jar包的形式,則在jar在項目的時候至關因而負責配置加載的類須要
      讀取同一個jar包下的配置文件(讀取資源文件同理),這對於項目徹底能夠修改的狀況
      下咱們能夠修改讀取配置文件的方式爲:
     
Java代碼 複製代碼  收藏代碼
  1. InputStream is=this.getClass().getResourceAsStream("/conf/res.txt");    
     InputStream is=this.getClass().getResourceAsStream("/conf/res.txt"); 
     

     來讀取配置問價或者資源文件;
     可是本分項目早已將加載資源文件的代碼單獨打爲jar包,那麼咱們不能去修改原有
      代碼,那麼「2」中的方法就比較有效了!
3、擴展知識點(備忘)
   1.可運行的jar文件和普通jar文件的區別在jar包中META-INFO/MANIFEST.MF
     文件:其中可運行jar中指定了main方法所在類的位置,以及運行時所依賴的jar包
    
Java代碼 複製代碼  收藏代碼
  1. Rsrc-Class-Path: ./ commons-lang.jar   
  2. Class-Path: .   
  3. Rsrc-Main-Class: org.test.Main   
  4. Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader   
    Rsrc-Class-Path: ./ commons-lang.jar
    Class-Path: .
    Rsrc-Main-Class: org.test.Main
    Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
    

   2.對於在某個包下的Main Class文件,在命令行下執行該類須要在根目錄下執行
    
Java代碼 複製代碼  收藏代碼
  1. java com.project.main.Main   
     java com.project.main.Main
    
    命令,而且必須帶包名,不然會報NoClassDefFoundError異常    3.java命令-D用來設置系統變量值;java.ext.dirs表示的是告訴虛擬機加載該路徑下      全部的jar文件;ext.dirs指定的jar文件由extention classloader負責加載
相關文章
相關標籤/搜索