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

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

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

    posts - 1,  comments - 25,  trackbacks - 0
    This class is used to dynmaic add user specify location to system loader or external loader

    /*
     * $Id: ClassLoaderUtil.java, Dec 22, 2009, 8:22:21 PM, liama. Exp$
     *
     */

    import java.io.File;
    import java.io.PrintStream;
    import java.lang.reflect.Field;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLClassLoader;
    import java.util.List;

    import sun.misc.Launcher;

    /**
     * Class/Interface description
     *
     * @author liama</a>
     * @since JDK 1.5
     */
    public class ClassLoaderUtil {
        /**
         * The value is used for get parent loader.
         */
        private static Field classes;

        /**
         * The add url method loader.
         */
        private static Method addURL;
        static {
            try {
                 classes = ClassLoader.class.getDeclaredField("parent");
                 addURL = URLClassLoader.class.getDeclaredMethod("addURL",new Class[] { URL.class });
             } catch (Exception e) {
                 e.printStackTrace();
             }
             classes.setAccessible(true);
             addURL.setAccessible(true);
         }

        /**
         * The value is used for system loader
         */
        private static URLClassLoader system = (URLClassLoader) getSystemClassLoader();

        /**
         * The value is used for external loader
         */
        private static URLClassLoader ext = (URLClassLoader) getExtClassLoader();

        /**
         * Get system loader
         *
         * @return {@link ClassLoader}
         */
        public static ClassLoader getSystemClassLoader() {
            return ClassLoader.getSystemClassLoader();
         }

        /**
         * Get external loader
         *
         * @return {@link ClassLoader}
         */
        public static ClassLoader getExtClassLoader() {
            return getSystemClassLoader().getParent();
         }

        /**
         * Get sub class loader from system class loader
         *
         * @return {@link List}
         */
        public static List getClassesLoadedBySystemClassLoader() {
            return getClassesLoadedByClassLoader(getSystemClassLoader());
         }

        /**
         * Get sub class loader from external class loader
         *
         * @return {@link List}
         */
        public static List getClassesLoadedByExtClassLoader() {
            return getClassesLoadedByClassLoader(getExtClassLoader());
         }

        /**
         * Get sub class loader from  class loader
         *
         * @param cl {@link ClassLoader}
         * @return {@link List}
         */
        public static List getClassesLoadedByClassLoader(ClassLoader cl) {
            try {
                return (List) classes.get(cl);
             } catch (Exception e) {
                //throw new RootException(e);
                 e.printStackTrace();
                return null;
            }
         }

        /**
         * Get bootstrap urls
         *
         * @return {@link URL}
         */
        public static URL[] getBootstrapURLs() {
            return Launcher.getBootstrapClassPath().getURLs();
         }

        /**
         * Get system urls
         *
         * @return {@link URL}
         */
        public static URL[] getSystemURLs() {
            return system.getURLs();
         }

        /**
         * Get external urls
         *
         * @return {@link URL}
         */
        public static URL[] getExtURLs() {
            return ext.getURLs();
         }

        /**
         * Print class path to specify stream
         *
         * @param ps {@link PrintStream}
         * @param classPath {@link URL}
         */
        private static void list(PrintStream ps, URL[] classPath) {
            for (int i = 0; i < classPath.length; i++) {
                 ps.println(classPath[i]);
             }
         }

        /**
         * List boot strap class path
         */
        public static void listBootstrapClassPath() {
             listBootstrapClassPath(System.out);
         }

        /**
         * Print boot strap class path
         *
         * @param ps {@link PrintStream}
         */
        public static void listBootstrapClassPath(PrintStream ps) {
             ps.println("BootstrapClassPath:");
             list(ps, getBootstrapClassPath());
         }

        /**
         * list system class path
         */
        public static void listSystemClassPath() {
             listSystemClassPath(System.out);
         }

        /**
         * Print system class path
         *
         * @param ps {@link PrintStream}
         */
        public static void listSystemClassPath(PrintStream ps) {
             ps.println("SystemClassPath:");
             list(ps, getSystemClassPath());
         }

        /**
         * List external class path
         */
        public static void listExtClassPath() {
             listExtClassPath(System.out);
         }

        /**
         * Print external class path
         *
         * @param ps {@link PrintStream}
         */
        public static void listExtClassPath(PrintStream ps) {
             ps.println("ExtClassPath:");
             list(ps, getExtClassPath());
         }

        /**
         * Get boot strap class path
         *
         * @return {@link URL}
         */
        public static URL[] getBootstrapClassPath() {
            return getBootstrapURLs();
         }

        /**
         * Get system class path
         *
         * @return {@link URL}
         */
        public static URL[] getSystemClassPath() {
            return getSystemURLs();
         }

        /**
         * Get external class path
         *
         * @return {@link URL}
         */
        public static URL[] getExtClassPath() {
            return getExtURLs();
         }

        /**
         * Add user specify URL to system class loader
         *
         * @param url {@link URL}
         */
        public static void addURL2SystemClassLoader(URL url) {
            try {
                 addURL.invoke(system, new Object[] { url });
             } catch (Exception e) {
                 e.printStackTrace();
             }
         }

        /**
         * Add user specify URL to external class loader
         *
         * @param url {@link URL}
         */
        public static void addURL2ExtClassLoader(URL url) {
            try {
                 addURL.invoke(ext, new Object[] { url });
             } catch (Exception e) {
                 e.printStackTrace();
             }
         }

        /**
         * Add user specify String to class loader
         *
         * @param path {@link String}
         */
        public static void addClassPath(String path) {
             addClassPath(new File(path));
         }

        /**
         * Add user specify String to external class loader
         *
         * @param path {@link String}
         */
        public static void addExtClassPath(String path) {
             addExtClassPath(new File(path));
         }

        /**
         * Add user specify File to  class loader
         *
         * @param dirOrJar {@link File}
         */
        public static void addClassPath(File dirOrJar) {
            try {
                 addURL2SystemClassLoader(dirOrJar.toURL());
             } catch (MalformedURLException e) {
                //throw new RootException(e);
                 e.printStackTrace();
             }
         }

        /**
         * Add user specify File to external class loader
         *
         * @param dirOrJar {@link File}
         */
        public static void addExtClassPath(File dirOrJar) {
            try {
                 addURL2ExtClassLoader(dirOrJar.toURL());
             } catch (MalformedURLException e) {
                 e.printStackTrace();
             }
         }
       
        /**
         * Add specify path to specify loader
         *
         * @param cl {@link ClassLoader}
         * @param path String
         */
        public static void addClassPath2ClassLoader(ClassLoader cl, String path){
            try {
                addURL.invoke(cl, new File(path).toURL());
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
        }
       
        /**
         * Add specify path to specify loader
         *
         * @param cl {@link ClassLoader}
         * @param path String
         */
        public static void addClassPath2ClassLoader(ClassLoader cl, URL path){
            try {
                addURL.invoke(cl, path);
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
        }
    }

    posted on 2009-12-24 21:04 Daniel 閱讀(605) 評論(0)  編輯  收藏 所屬分類: CoreJava
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(3)

    隨筆檔案

    文章分類

    文章檔案

    相冊

    搜索

    •  

    最新評論

    主站蜘蛛池模板: 亚洲国产日韩在线| 亚洲免费网站在线观看| 美女被羞羞网站免费下载| 成全高清视频免费观看| 久久精品国产亚洲αv忘忧草| 老司机午夜在线视频免费观| 在线观看免费精品国产| 青草久久精品亚洲综合专区| 免费无码成人AV片在线在线播放| 亚洲视频在线一区二区三区| 95免费观看体验区视频| 亚洲国色天香视频| 亚洲成在人线aⅴ免费毛片| 亚洲欧洲国产综合AV无码久久| 真人做A免费观看| 亚洲综合国产成人丁香五月激情| 很黄很黄的网站免费的| 午夜在线a亚洲v天堂网2019| 在线观看免费a∨网站| 污污的视频在线免费观看| 国产亚洲?V无码?V男人的天堂| 国产免费牲交视频免费播放| 亚洲乱码精品久久久久..| 免费不卡在线观看AV| 亚洲最大的成人网| mm1313亚洲国产精品美女| 日本一区午夜艳熟免费| 亚洲大尺码专区影院| 四虎国产精品免费视| 中文字幕av无码不卡免费| 91天堂素人精品系列全集亚洲| 青青青国产手机频在线免费观看| 亚洲男人都懂得羞羞网站| 午夜毛片不卡高清免费| 一个人看的www在线免费视频| 亚洲综合国产一区二区三区| 8x8×在线永久免费视频| 亚洲精品无码av片| 亚洲午夜激情视频| 91黑丝国产线观看免费| 黄色a级片免费看|