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

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

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

    隨筆-50  評(píng)論-55  文章-8  trackbacks-0
    前言:用myEclipse打包可執(zhí)行jar文件,特別是需要包含第三方資源包的時(shí)候,往往打包好之后jar文件找不到,即使 manifest.mf 文件設(shè)置了ClassPath= ?.jar 之類的,還會(huì)找不到第三方資源包的問題;一般情況下,第三方資源包都不應(yīng)該和你的應(yīng)用程序打成一個(gè)包,而是作為外部文件引入,這個(gè)時(shí)候需要考慮用classloader的方式打包。

    步驟一:
    ????? 自己的程序先打一個(gè)包my.jar(可以是不可執(zhí)行的),這個(gè)不包含第三方資源包(如log4j.jar);用myeclipse的export方式可以搞定;

    步驟二:
    ???? 寫一些加載第三方資源包的類,這里可以參考這個(gè)類(網(wǎng)上找的

    import java.io.*;??
    import java.net.*;??
    import java.lang.reflect.*;??
    ?
    public class BootLoader??
    {??
    ? public static void main(final String[] args) throws Exception??
    ? {??
    ??? // check that the lib folder exists??
    ??? File libRoot = new File(LIB_FOLDER);??
    ??? if(!libRoot.exists()) {??
    ????? throw new Exception("No 'lib' folder exists!");??
    ??? }??
    ??? // read all *.jar files in the lib folder to array??
    ??? File[] libs = libRoot.listFiles(new FileFilter()??
    ??? {??
    ????? public boolean accept(File dir)??
    ????? {??
    ??????? String name = dir.getName().toLowerCase();??
    ??????? return name.endsWith("jar") || name.endsWith("zip");??
    ????? }??
    ??? });??
    ?
    ??? URL[] urls = new URL[libs.length];??
    ??? // fill the urls array with URLs to library files found in libRoot??
    ??? for(int i = 0; i < libs.length; i++) {??
    ????? urls[i] = new URL("file",null,libs[i].getAbsolutePath());??
    ??? }??
    ??? // create a new classloader and use it to load our app.??
    ??? classLoader = new URLClassLoader(urls,??
    ???????????????????????????????????? Thread.currentThread().??
    ???????????????????????????????????? getContextClassLoader());??
    ??? // get the main method in our application to bring up the app.??
    ??? final Method mtd = classLoader.loadClass(APP_MAIN_CLASS).getMethod("main",??
    ??????? new Class[] {String[].class});??
    ??? // Using thread to launch the main 'loop' so that the current Main method??
    ??? // can return while the app is starting??
    ??? new Thread(new Runnable()??
    ??? {??
    ????? public void run()??
    ????? {??
    ??????? try {??
    ????????? mtd.invoke(null,new Object[] {args});??
    ??????? } // forward the args??
    ??????? catch(Exception e) {??
    ????????? throw new RuntimeException(e);??
    ??????? }??
    ????? }??
    ??? },"AppMain").start();??
    ??? // Give the app some time to start before returning from main.??
    ??? // This doesn't delay the starting in any way??
    ??? Thread.sleep(1000);??
    ? }??
    ?
    ? private static final String LIB_FOLDER = "lib";?? //所有第三方包放在這個(gè)文件夾下
    ? private static final String APP_MAIN_CLASS = "com.monitor.Main";?? //可執(zhí)行文件的入口程序,也是你自己代碼的一個(gè)包含main函數(shù)的類
    ? private static ClassLoader classLoader;??
    }?
    再將這個(gè)獨(dú)立的類打包成可執(zhí)行文件main.jar(不包含第三方資源包)

    步驟三:組織好各個(gè)文件
    比如在文件下F:/存在 文件
    main.jar
    lib(文件夾,lib文件夾下 放:my.jar ,log4j.jar,等等)
    config.properties(如果有配置文件)
    logo.jpg(如果有外部圖片)
    可以寫個(gè)批處理文件main.bat 內(nèi)容: java? -Xms100m?? -Xmx800m? -jar main.jar
    雙擊main.bat 即可執(zhí)行
    posted on 2008-07-17 11:16 蔣家狂潮 閱讀(1856) 評(píng)論(1)  編輯  收藏 所屬分類: Basic

    評(píng)論:
    # re: 用classloader方式打包可執(zhí)行jar文件[未登錄] 2008-07-17 14:35 | paul
    你安裝fatjar,還用這么費(fèi)勁啊  回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: 一级毛片aaaaaa视频免费看| 亚洲五月综合网色九月色| 日本黄页网址在线看免费不卡| 最近最好的中文字幕2019免费 | 综合亚洲伊人午夜网 | 亚洲精品视频观看| 50岁老女人的毛片免费观看| 78成人精品电影在线播放日韩精品电影一区亚洲 | 免费影院未满十八勿进网站| 国产精品亚洲四区在线观看| 成年女人看片免费视频播放器| 亚洲日韩国产AV无码无码精品| 热久久精品免费视频| 特级毛片A级毛片100免费播放| 国产黄色一级毛片亚洲黄片大全| 国产VA免费精品高清在线| 亚洲AV无码一区二区乱子伦| 精品国产免费人成电影在线观看| 亚洲乱码在线卡一卡二卡新区| 日韩一级视频免费观看| 久青草国产免费观看| 亚洲AV无一区二区三区久久| 亚洲视频在线免费播放| 亚洲精品无码日韩国产不卡av| 免费一级毛片免费播放| 最近免费mv在线观看动漫| 亚洲欧洲日产专区| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 亚洲第一精品福利| 18禁无遮挡无码网站免费| 国产精品亚洲а∨无码播放不卡| 红杏亚洲影院一区二区三区| 日本免费一区二区三区四区五六区 | 亚洲啪啪免费视频| 亚洲人成无码网WWW| 97青青草原国产免费观看| 亚洲av日韩综合一区二区三区| 国产一级一片免费播放i| 亚洲日韩国产一区二区三区在线 | 亚洲不卡视频在线观看| 毛片免费在线观看网站|