java程序關(guān)于第三方j(luò)ar包發(fā)布的另一種方法(從老金的博客中拷來的)

          java程序關(guān)于第三方j(luò)ar包發(fā)布的另一種方法

              大概我們每個人都有過這種經(jīng)歷,編好了一個應(yīng)用,當打成jar包后,當引用第三包時卻總是拋ClassNotFoundException 而無法正常運行。我現(xiàn)在知道的有兩種解決方法,一種是在manifest.mf中設(shè)置classpath,把所需的第三方包手動加進去,還有一種就是用是用第三方打包工具了,比如fatjar。今天察看Jmeter的源代碼時發(fā)現(xiàn)了另一種方法。為了更清楚些,下面進行舉例進行說明:
                先新建一個工程,建一個類,源代碼如下:
               package first;
              import java.util.Date;
              public class My {
                 public String getTime(){
                      return new Date().toString();
                }
             }
              然后把它打成包,用來模擬第三方包,不妨取名first.jar.
             然后,再建第二個工程,把剛才的包加入到這個工程中,新建類如下:
            package mypackage;
            import first.My;
            public class Task {
              public void start(String [] args){
                  My my = new My();
                  System.out.println(my.getTime());
              }
           }
            start()方法作為咱們整個應(yīng)用的入口函數(shù),經(jīng)測試發(fā)現(xiàn)沒有問題。到此,準備工作完畢,下面開始進行解決問題的關(guān)鍵部分了:
            新建類NewDrever,其源代碼如下:
                                             package mypackage;
                                             import java.io.File;
                                              import java.io.FilenameFilter;
                                              import java.lang.reflect.Method;
                                              import java.net.MalformedURLException;
                                              import java.net.URL;
                                              import java.net.URLClassLoader;
                                              import java.util.LinkedList;
                                              import java.util.List;
                                              public class NewDrever {
                                                          public static void main(String [] args){
                                                                          File userDir = new File(System.getProperty("user.dir"));
                                                                          String jmDir = userDir.getAbsoluteFile().getParent();
                                                                          File libDirs = new File(jmDir+File.separator+"lib");
                                                                          File [] libJars = libDirs.listFiles(new FilenameFilter(){
                                                                          public boolean accept(File dir,String name) {
                                                                                                  if(name.endsWith(".jar"))
                                                                                                          return true;
                                                                                                      return false;
                                                                          }
                                                                              });
                                                                      List jars = new LinkedList();
                                                                      //System.out.println(System.getProperty("java.class.path"));
                                                                      StringBuffer classpath = new StringBuffer();
                                                                      for(int i = 0;i < libJars.length;i++){
                                                                      try {
                                                                                          jars.add(new URL("file","",libJars[i].getPath()));
                                                                                          classpath.append(System.getProperty("path.separator"));
                                                                                          classpath.append(libJars[i].getPath());
                                                                          } catch (MalformedURLException e) {
                                                                                                  e.printStackTrace();
                                                                                                      }
                                                              }
                                                              System.setProperty("java.class.path",System.getProperty("java.class.path")+classpath.toString());
                                                              //System.out.println(System.getProperty("java.class.path"));
                                                              URLClassLoader loader = new URLClassLoader((URL[])jars.toArray(new URL[0]));
                                                              //Thread.currentThread().setContextClassLoader(loader);
                                                              try {
                                                                          Class JMeter = loader.loadClass("mypackage.Task");
                                                                          Object instance = JMeter.newInstance();
                                                                          Method startup = JMeter.getMethod("start",new Class[]{(new String[0]).getClass()});
                                                                          startup.invoke(instance,new Object[]{args});
                                                                  } catch(Exception e) {
                                                                              e.printStackTrace();
                                                                  }
                                          }
                              }
              把第二個工程打成可執(zhí)行的jar包,取名second.jar,新建一個文件夾,不妨取名為Test,test下面分別建lib和bin兩個文件夾,把first.jar和second.jar拷貝到lib中,把second.jar再考到bin下面一份。現(xiàn)在還沒有完畢,把bin下的second.jar的包中除了
          NewDrever.class全部刪掉,至此完畢。這時,進到bin目錄下 敲java -jar second.jar 會在控制臺打出當前的時間。而時間來自"第三方包"。

          posted on 2007-07-10 10:50 liujg 閱讀(789) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          boddiy

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 泰来县| 蒲城县| 襄城县| 沙洋县| 南阳市| 阳曲县| 阿拉善左旗| 阿拉善盟| 揭阳市| 本溪| 永嘉县| 江达县| 桃园县| 朔州市| 胶州市| 瑞金市| 集安市| 富阳市| 东辽县| 东城区| 区。| 同仁县| 米林县| 双牌县| 石柱| 景宁| 湖口县| 喜德县| 铜陵市| 广平县| 保康县| 宣汉县| 阳高县| 泗洪县| 色达县| 雷山县| 正安县| 礼泉县| 武山县| 宝坻区| 喀喇|