// 生成JAR包D:\TestClass.jar

package hand.java.loadjar;

public class TestClass {

private String sayHello = "Hello World!!";

public String sayHello() {
        return this.sayHello;
    }
}

// 创建一个测试类

package hand.java.loadjar;

import java.net.URL;
import java.net.URLClassLoader;
import java.lang.reflect.Method;

public class LoadJarTest {    
    public LoadJarTest(){
        try {
            URL url = new URL("file:D:\\TestClass.jar");  
            URLClassLoader  loader = new URLClassLoader(new URL[]{ url });   
            // Load class
            Class<?> myclass = loader.loadClass("hand.java.loadjar.TestClass");
            // Gene new object
            Object myobject = myclass.newInstance();   
            // Get function
            Method method = myclass.getDeclaredMethod("sayHello");
            // Make the function  valid
            method.setAccessible(true);
            // Invoke method
            System.out.println(method.invoke(myobject));   
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    @SuppressWarnings("unused")
    public static void main(String[] args){
        LoadJarTest loadjar = new LoadJarTest();
    }
}

运行,输出内容:

Hello World!!




package hand.dynamic.jar;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;

public class JarLoadUtil {

private static String jar_path = "D:\\JAR";
    private static URLClassLoader loader = null;
    // private static String curDir = System.getProperty("user.dir");
    private static String separator = System.getProperty("file.separator");

public static URLClassLoader getURLClassLoader() {
        if (loader == null) {
            String fileNames[] = new File(jar_path).list();
            if (fileNames != null && fileNames.length > 0) {
                URL urls[] = new URL[fileNames.length];
                for (int i = 0; i < fileNames.length; i++) {
                    try {
                        // if (fileNames[i].equals("dom4j-1.6.1.jar"))
                        urls[i] = new URL(jar_path + separator + fileNames[i]);
                    } catch (MalformedURLException e) {
                        System.out.println("加载指定目录下JAR文件出错!");
                        throw new RuntimeException("加载指定目录下JAR文件出错!", e);
                    }
                }
                loader = new URLClassLoader(urls);
            }
        }

return loader;
    }
}

JAVA动态加载JAR的更多相关文章

  1. java动态加载jar文件

    public static void main(String[] args) throws IllegalAccessException, IllegalArgumentException, Invo ...

  2. JAVA动态加载JAR包的实现

    如何动态的加载这些驱动!不可能把所有的数据库驱动都集成到JAR包中吧?!于是动态加载驱动的JAR包就产生了!其实这些在做系统基础代码时,经常用到,只是一般我们没有机会去搞而已. 动态加载JAR包,使用 ...

  3. Java动态加载jar及class文件

    经常碰到需要动态加载jar及class文件的场景.Java类由于需要加载和编译字节码,动态加载class文件较为麻烦,但JDK仍提供了一整套方法来动态加载jar文件和class文件. 一.动态加载ja ...

  4. java动态加载jar包,并运行其中的类和方法

    动态加载jar包,在实际开发中经常会需要用到,尤其涉及平台和业务的关系的时候,业务逻辑部分可以独立出去交给业务方管理,业务方只需要提供jar包,就能在平台上运行. 下面通过一个实例来直观演示: 第一: ...

  5. Java动态加载JAR包

    参考代码: package org; import java.io.File; import java.net.URL; import java.net.URLClassLoader; import ...

  6. JAVA动态加载JAR包执行程序

    入口代码 import java.io.File; import java.net.MalformedURLException; import java.net.URL; import java.ne ...

  7. [转载] Java中动态加载jar文件和class文件

    转载自http://blog.csdn.net/mousebaby808/article/details/31788325 概述 诸如tomcat这样的服务器,在启动的时候会加载应用程序中lib目录下 ...

  8. Java_Java中动态加载jar文件和class文件

    转自:http://blog.csdn.net/mousebaby808/article/details/31788325 概述 诸如tomcat这样的服务器,在启动的时候会加载应用程序中lib目录下 ...

  9. Android动态加载jar/dex

    前言 在目前的软硬件环境下,Native App与Web App在用户体验上有着明显的优势,但在实际项目中有些会因为业务的频繁变更而频繁的升级客户端,造成较差的用户体验,而这也恰恰是Web App的优 ...

随机推荐

  1. Spring 事务详解

    实现购买股票案例: 一.引入JAR文件: 二.开始搭建分层架构---创建账户(Account)和股票(Stock)实体类 Account: ? 1 2 3 4 5 6 7 8 9 10 11 12 1 ...

  2. Nginx深入详解之多进程网络模型

    一.进程模型        Nginx之所以为广大码农喜爱,除了其高性能外,还有其优雅的系统架构.与Memcached的经典多线程模型相比,Nginx是经典的多进程模型.Nginx启动后以daemon ...

  3. dubbox 增加google-gprc/protobuf支持

    好久没写东西了,今年实在太忙,基本都在搞业务开发,晚上来补一篇,作为今年的收官博客.google-rpc 正式发布以来,受到了不少人的关注,这么知名的rpc框架,不集成到dubbox中有点说不过去. ...

  4. [LeetCode] Simplify Path 简化路径

    Given an absolute path for a file (Unix-style), simplify it. For example,path = "/home/", ...

  5. [LeetCode] Palindrome Number 验证回文数字

    Determine whether an integer is a palindrome. Do this without extra space. click to show spoilers. S ...

  6. 学券制(教育券、school voucher)

    美国「学券制」是怎样的一种制度?它为什么是共和党的执政政策?它在美国及其它地区有实施吗?效果如何?能否在保证公平的同时,通过市场提高教育质量? 作者:冉筱韬链接:https://www.zhihu.c ...

  7. 5G承载为什么需要三层到边缘

  8. 【Git】关于VSCode 内置Git问题

    VSCode的内置git是自动关联本机git的, 所以当提交代码时,VSCode提示[警告:请配置git用户名和账户]时, 只需要在git bash 端配置git config --gobal use ...

  9. map 函数----filter函数

    # map 函数 l = (1,2,4,5,6,7,8,9,) print(list(map(lambda x:x**2,l)))#使用list类型((map函数(lambda 匿名函数定义x值:x* ...

  10. Shell命令_smem

    监控各个进程.用户的内存使用情况 基础条件:需要安装yum工具 centos 7.0 1.安装smem [root@VM_31_182_centos src]# yum install smem py ...