Java动态加载jar

通常应用程序都会有很多依赖包,通常的做法是写脚本,在脚本中把依赖包添加到classpath,然后启动主程序。所以本篇纯属调侃,如何在java程序中实现动态加载一个jar,而之后可以自由的使用jar中的类。以前放在博客园,现搬到CSDN来。

http://www.cnblogs.com/rookieport/articles/1667563.html


比如我们有个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();
        }
    }
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kyle-soft

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值