如何在Java运行的时候动态加载一个jar包到classpath里面

 我来答
地瓜说机
2017-09-23 · TA获得超过2.9万个赞
知道大有可为答主
回答量:2.3万
采纳率:91%
帮助的人:1.2亿
展开全部
给你个例子自己看一下吧不会了再追问,注释基本都有了
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125    import java.io.<img id="selectsearch-icon" src="https://gss0.bdstatic.com/70cFsjip0QIZ8tyhnq/img/iknow/qb/select-search.png" alt="搜索">File;import java.lang.reflect.<a href="https://www.baidu.com/s?wd=Method&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3ryc3nvD4mWT4rjnzmvw-0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EPjRdP1mdPj6dn10dnWf3nHmd" target="_blank" class="baidu-highlight">Method</a>;import java.net.<a href="https://www.baidu.com/s?wd=URL&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3ryc3nvD4mWT4rjnzmvw-0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EPjRdP1mdPj6dn10dnWf3nHmd" target="_blank"class="baidu-highlight">URL</a>;import java.net.<a href="https://www.baidu.com/s?wd=URL&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3ryc3nvD4mWT4rjnzmvw-0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EPjRdP1mdPj6dn10dnWf3nHmd" target="_blank"class="baidu-highlight">URL</a><a href="https://www.baidu.com/s?wd=Class&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3ryc3nvD4mWT4rjnzmvw-0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EPjRdP1mdPj6dn10dnWf3nHmd" target="_blank" class="baidu-highlight">Class</a>Loader;import java.util.List; public final <a href="https://www.baidu.com/s?wd=class&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3ryc3nvD4mWT4rjnzmvw-0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EPjRdP1mdPj6dn10dnWf3nHmd" target="_blank"class="baidu-highlight">class</a> Ext<a href="https://www.baidu.com/s?wd=Class&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3ryc3nvD4mWT4rjnzmvw-0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EPjRdP1mdPj6dn10dnWf3nHmd" target="_blank" class="baidu-highlight">Class</a>pathLoader {         private static <a href="https://www.baidu.com/s?wd=Method&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3ryc3nvD4mWT4rjnzmvw-0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EPjRdP1mdPj6dn10dnWf3nHmd" target="_blank" class="baidu-highlight">Method</a> add<a href="https://www.baidu.com/s?wd=URL&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3ryc3nvD4mWT4rjnzmvw-0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EPjRdP1mdPj6dn10dnWf3nHmd" target="_blank" class="baidu-highlight">URL</a> = initAdd<a href="https://www.baidu.com/s?wd=Method&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3ryc3nvD4mWT4rjnzmvw-0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EPjRdP1mdPj6dn10dnWf3nHmd" target="_blank" class="baidu-highlight">Method</a>();     private static URLClassLoader classloader = (URLClassLoader) ClassLoader.getSystemClassLoader();     /**      * <a href="https://www.baidu.com/s?wd=%E5%88%9D%E5%A7%8B%E5%8C%96&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3ryc3nvD4mWT4rjnzmvw-0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EPjRdP1mdPj6dn10dnWf3nHmd" target="_blank" class="baidu-highlight">初始化</a>addUrl 方法.     * @return 可访问addUrl方法的Method对象     */    private static Method initAddMethod() {        try {            Method add = URLClassLoader.class.getDeclaredMethod("addURL", new Class[] { URL.class });            add.setAccessible(true);            return add;        }        catch (Exception e) {            throw new RuntimeException(e);        }    }      /**      * 加载jar classpath。     */    public static void loadClasspath() {        List<String> files = getJarFiles();        for (String f : files) {            loadClasspath(f);        }         List<String> resFiles = getResFiles();         for (String r : resFiles) {            loadResourceDir(r);        }    }     private static void loadClasspath(String filepath) {        File file = new File(filepath);        loopFiles(file);    }     private static void loadResourceDir(String filepath) {        File file = new File(filepath);        loopDirs(file);    }     /** *//**         * 循环遍历目录,找出所有的资源路径。     * @param file 当前遍历文件     */    private static void loopDirs(File file) {        // 资源文件只加载路径        if (file.isDirectory()) {            addURL(file);            File[] tmps = file.listFiles();            for (File tmp : tmps) {                loopDirs(tmp);            }        }    }     /**      * 循环遍历目录,找出所有的jar包。     * @param file 当前遍历文件     */    private static void loopFiles(File file) {        if (file.isDirectory()) {            File[] tmps = file.listFiles();            for (File tmp : tmps) {                loopFiles(tmp);            }        }        else {            if (file.getAbsolutePath().endsWith(".jar") || file.getAbsolutePath().endsWith(".zip")) {                addURL(file);            }        }    }         /**     * 通过filepath加载文件到classpath。     * @param filePath 文件路径     * @return URL     * @throws Exception 异常     */    private static void addURL(File file) {        try {            addURL.invoke(classloader, new Object[] { file.toURI().toURL() });        }        catch (Exception e) {        }    }       /***     * 从配置文件中得到配置的需要加载到classpath里的路径集合。     * @return     */    private static List<String> getJarFiles() {        // TODO 从properties文件中读取配置信息  如果不想配置 可以自己new 一个List<String> 然后把 jar的路径加进去 然后返回        return null;    }     /**     * 从配置文件中得到配置的需要加载classpath里的资源路径集合     * @return     */    private static List<String> getResFiles() {        //TODO 从properties文件中读取配置信息略  如果不想配置 可以自己new 一个List<String> 然后把 jar的路径加进去 然后返回  额 如果没有资源路径为空就可以了        return null;    }     public static void main(String[] args) {        ExtClasspathLoader.loadClasspath();    }}
朴质还顺利丶东风6
2017-09-23 · TA获得超过1720个赞
知道小有建树答主
回答量:367
采纳率:0%
帮助的人:216万
展开全部
在项目目录下创建文件夹,一般命名为lib,把你的jar包复制进入,再选择所有的jar包,右键菜单有一个Build Path,下拉菜单只有一个选择,点击就加入了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式