`
zhongzhao_2008
  • 浏览: 35332 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
最近访客 更多访客>>
社区版块
存档分类
最新评论

动态加载jar文件

阅读更多
   初学Java时教科书告诉我们,若要运行Java程序,必需为其设置环境变量。有时候为了实现某种功能(例如动态加载Class)我们需要在程序中来实现这个功能。我们经常使用的Eclipse就是很好的例子,它的所有插件的.jar文件都是放在plugin目录下的,如何加载这些包并使用其中的类成了一个棘手的问题。(关于Eclipse的类加载机制,大家可以参考《Contributing to Eclipse》p54)

下面我们就来看看,在程序中如何实现这个功能。
1、建立一个工程,并为其增加一个 Interface,命名为ActionInterface.java。该接口为使用者公开了一个方法,如下:

程序代码
package org.junesky.classPathTest;
public interface ActionInterface {
    public String action();
}

编译后,将该工程打包为.jar文件。
打包方法:
在包的顶级目录(也就是例子中的org所在的目录)建立一个名为MANIFEST.MF的文件,键入:Manifest-Version: 1.0保存。
在ms-doc窗口中键如命令:jar cvfm classLoader.jar MANIFEST.MF org/
其中classLoader.jar是打包后的文件名,org/是path。

2、建立一个新工程,将classLoader.jar导入,新建class文件MyAction并实现ActionInterface。如下:

程序代码
package org.junesky. MyAction;
import org.junesky.classPathTest. ActionInterface;
public class MyAction implements ActionInterface {
    public String action() {
        // TODO Auto-generated method stub
        return "------------------ok";
    }
}

编译后打包为classTest.jar。

3、新建一工程,将classLoader.jar和classTest.jar导入,新建class文件MyClassLoader.java并继承URLClassLoader。如下:

程序代码
package org.junesky.classPathTest;

import   java.net.URL;
import   java.net.URLClassLoader;

import org.junesky.classPathTest. ActionInterface;

public class ClassPathTest extends URLClassLoader {
    public ClassPathTest(URL url) {
        super(new URL[] { url });
    }

    public static Object test(String str , String cls) {
        try {
            URL url = new URL(str);
            ClassPathTest t = new ClassPathTest(url);

Class c = t.findClass(cls);
ActionInterface action = (ActionInterface)c.newInstance();

return action.action();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return "";
    }

    public static void main(String[] args) {
        try {
          
            System.out.println(
                ClassPathTest.test("file:D:/JavaTest/ClassTest2/lib/ MyAction.jar",
                        "org.junesky. MyAction. MyAction "));

        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

编译通过执行,会看到控制台上打印出:
------------------ok

下面我们来看看,这个程序到底做了什么。首先,我们创建了一个接口ActionInterface,在利用URLClassLoader. findClass后,以这个接口创建对象的实例。在第二个jar文件中,我们创建了MyAction.java并实现了ActionInterface,在方法action中我们返回了一个字符串。接下来,我们利用URLClassLoader加载D:/JavaTest/ClassTest2/lib/ MyAction.jar,并以findClass查找并加载org.junesky. MyAction. MyAction类,为得到的Class生成实例:

Class c = t.findClass(cls);  // 加载类
ActionInterface action = (ActionInterface)c.newInstance();  // 生成对象实例

最后调用ActionInterface中声明的action方法打印出MyAction中返回的字符串。

以上代码仅仅是Java Class加载的使用方法的简单说明,在真正开发项目过程序中,往往还需要考虑更多的问题,以后我们再继续说明。
分享到:
评论

相关推荐

    Java 动态加载jar文件示例

    Java 动态加载jar文件示例,轻松实现插件式开发

    android动态加载jar文件

    有些项目需要(根据机型)动态加入jar包,该资源包含了一个在android工程中动态加载jar文件的小程序,注释详细,需要注意我们的jar文件是需要经过dx处理过的,可参考博客:...

    JAVA动态加载JAR文件

    JAVA动态加载JAR文件以及反射调用其方法

    android动态加载jar文件中的图片

    该资源包含了一个动态加载jar文件中图片的简单demo,简单易懂。

    Spring bean 动态注册,jar包热替换

    spring的bean动态加载则需要对相应的bean进行动态注册,以及jar与class文件动态加载。测试示例中是spring boot 的部分代码,动态加载的内容为接口实现类,且初始化时加载本地的实现类,动态加载后改为非程序加载目录...

    动态加载jar

    该资源包含了一个动态加载jar文件的源码,简单易懂。

    Java URLClassLoader动态加载jar包1

    该类加载器用于从指向 JAR 文件和目录的 URL 的搜索路径加载类和资源。如果不是以该字符结束,则认为该 URL 指向一个将根据需要打开的 JAR 文件pac

    apk文件中添加jar文件

    apk文件中添加jar文件 ,baksmali,apktool,jar2dex

    Java 自动加载JAR文件并运行其中的类方法

    Java 自动加载JAR文件并运行其中的类方法

    Android 中动态加载.jar的实现步骤

    首先第一个是 jar 文件的制作,Java 里面直接把 .class 文件打包到 .jar 文件里面就可以了,但是 Android 的 Dalvik VM 是不认 Java ...要动态加载其它类,可以用的 Class Loader 有: DexClassLoader,PathClassLoader

    如何加载jar包中的spring配置文件

    springmvc项目中如何加载jar包中的spring配置文件

    动态加载jdbc jar包连接数据库生成数据文件

    动态加载jdbc Jar包连接数据库,生成压力测试jmter需要的数据文件。

    springboot+java类热加载

    springboot 、java类热加载、jarinjar、动态编译、自动引用依赖

    集成图片的jar文件和外部导入图片的jar文件

    java程序如果有引入图片的话,生成jar文件会有两种选择: 一种是在jar文件外部导入图片。 另一种是把图片集成进jar文件中,直接打开jar文件即可。 孰优孰劣,下载下来自己体会一下。

    JavaEE外部jar文件

    javaEE的一些jar包有antlr.jar standard.jar asm.jar aspectjweaver.jar commons-beanutils.jar commons-digester.jar log4j-1.2.15 struts.jar strutstest-2.1.0.jar 等

    Java 动态加载jar和class文件实例解析

    主要介绍了Java 动态加载jar和class文件实例解析,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下

    Dynamic_jar:android 插件化动态加载jar

    android 插件化动态加载jar 有时候会看到一些应用对应的SDcard里的文件夹里有 ***.jar 等文件,现在明白这些文件大概是用来做应用内自动更新用的。 打比方说,类似eclipse 可以通过预留接口,安装各种插件一样。  ...

    jar文件搜索工具

    根据输入的指定内容,搜索jar文件中的类; 使用需要有java环境,干Java的应该不需要过多解释吧! 单文件,双击即可运行~ 使用步骤: 1、添加需要检索的所有jar包 2、输入关键词进行搜索,即可定位类文件 配合反...

    qhs2.3-inst.jar(http服务器)

    qhs主要用Java语言编写,可在WindowsXP专业版、Linux等操作系统安装、运行...qhs2.3新增的功能:动态加载jar文件、动态加载服务模块。qhs2.3-inst.jar的下载地址见需在本站查找、下载的qhs2.3-download-addresses.txt。

Global site tag (gtag.js) - Google Analytics