[心缘地方]同学录
首页 | 功能说明 | 站长通知 | 最近更新 | 编码查看转换 | 代码下载 | 常见问题及讨论 | 《深入解析ASP核心技术》 | 王小鸭自动发工资条VBA版
登录系统:用户名: 密码: 如果要讨论问题,请先注册。

[转帖]Java动态载入Jar包中的类的一个小例子

上一篇:[转]XPath的一个应用
下一篇:[备忘]Java线程的sleep方法被中断时,应该处理异常~~

添加日期:2011/11/16 16:22:04 快速返回   返回列表 阅读6449次
通常应用程序都会有很多依赖包,通常的做法是写脚本,在脚本中把依赖包添加到classpath,然后启动主程序。所以本篇纯属调侃,如何在java程序中实现动态加载一个jar,而之后可以自由的使用jar中的类。
 
比如我们有个demo.Person类


package demo;

public class Person {
    private int age;
    private String name;

    public Person() {
    }
    
    public Person(String name, int age) {
        this.age = age;
        this.name = name;
    }
    
    public int  getAge() {
        return this.age;
    }
    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }

    public String toString() {
        return "Person{name: " + this.name + ", age: " + this.age + "}";
    }
}


 
 我们把demo.Person编译后打包到person.jar,比如放在E:\training\person.jar
 
然后我们在调用的主程序中可以通过如下代码动态加载person.jar:


import demo.Person;
import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;

/**
 * 这里演示动态加载一个jar的方法
 * 其中 demo.Person 类打包在 E:/Training/person.jar
 * 执行的时候只需要在Demo的当前路径执行 java Demo就可以自动装载person.jar
 */
public class Demo {
    public static void main(String[] args) {
        try {
            // 包路径定义
            URL urls[] = new URL[ ]{ new File("E:/Training/person.jar").toURL() };

            // 获取类装载器,然后用反射方式调用类加载器的addURL方法,把新的jar路径添加进去
            URLClassLoader urlLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
            Class sysclass = URLClassLoader.class; 
            Method method = sysclass.getDeclaredMethod("addURL", new Class[]{URL.class});
            method.setAccessible(true);
            method.invoke(urlLoader, urls);
            
            Person p = new Person("Kyle.Zhang", 33);
            System.out.println(p);
        } catch (Exception exp) {
            exp.printStackTrace();
        }
    }
}



程序运行当前路径和分隔符可以这样取得:
String curDir = System.getProperty("user.dir");
String separator = System.getProperty("file.separator");
 

评论 COMMENTS
没有评论 No Comments.

添加评论 Add new comment.
昵称 Name:
评论内容 Comment:
验证码(不区分大小写)
Validation Code:
(not case sensitive)
看不清?点这里换一张!(Change it here!)
 
评论由管理员查看后才能显示。the comment will be showed after it is checked by admin.
CopyRight © 心缘地方 2005-2999. All Rights Reserved