0 0

web服务动态加载自己的类包(jar包) URLClassLoader 10

菜鸟 请教个问题哈 用URLClassload来加载自己打包的jar包,在控制台测试通过,为什么发布成服务后就load不进来那个jar包了呢,

//URL url = Transmission.class.getResource("agent.jar");
URL url = new URL("file:/E:/AB_F/BPEL/AgentPro/Transmission/build/classes/agent.jar");
System.out.println(url);
URLClassLoader loader = new URLClassLoader(new URL[] { url }, Thread.currentThread().getContextClassLoader());

急求啊!!!

问题补充:是在本机上!不过将来是要到不同机子上做测试的,用tomcat做测试。还有您说用相对路径是指把ar包拷到tomcat的webapps下么,然后用http://localhost:8080/XXXX/agent.jar么?如果能这样就更好了!好吧 贴出全部代码:求教:


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


public class Transmission {
        //path为传输过来的agent.jar包路径
public String invokeFun(String path){
boolean bo = true;
while (bo) {
try {
//i++;
Thread.sleep(1000);
//找到已经传输过来的agent
//URL url = Transmission.class.getResource("agent.jar");
URL url = new URL(path);
//System.out.println(url);
URLClassLoader loader = new URLClassLoader(new URL[] { url }, Thread.currentThread().getContextClassLoader());
//System.out.println(loader);
//把agent jar包中的类load进来
        Class clazz = loader.loadClass("ImInterf");
        //System.out.println(clazz);
    if (clazz == null) {
    bo = true;
    return "False!";
}else{
//实例化类对象
Object obj = clazz.newInstance();
//声明一个接口对象,以用来调用接口中的方法
interf mai = (interf) obj;
mai.fun("Josh", "Cindy");
bo = false;
//System.out.println("Succed!");
}

} catch (Exception e) {
System.out.println("error");

}
}
return "";
}

//public static void main(String[] arg0){
// Transmission T = new Transmission();
// T.invokeFun("file:/E:/4.jar");
//}

}

说明:
interf是在另一个工程中定义的接口,然后导出jar包,再导入到本Transmission 类中;
agent.jar是打包了的实现了interf接口的方法的类;
运行思路:大概就是把Transmission类发布成服务,服务端通过调用这个服务来实现动态加载agent.jar包。

恩 就是这个样子了 还请给出详细解决办法 谢谢!
2013年5月15日 20:14

1个答案 按时间排序 按投票排序

0 0

引用
发布成服务后
这个描述清楚一点,是在本机,还是换机器了,如果换机器的话就是绝对地址的问题,URL url = new URL("file:/E:/AB_F/BPEL/AgentPro/Transmission/build/classes/agent.jar");
这个还是建议用相对地址。

2013年5月16日 08:39

相关推荐

    Java URLClassLoader动态加载jar包1

    然后,使用`Class.forName()`方法,指定了要加载的类全名(包括包名)"org.javaweb.url.Url",并传入`URLClassLoader`实例作为上下文类加载器,这样就可以确保这个类是由这个特定的`URLClassLoader`加载的。...

    使用URLClassLoader加载本地文件夹c盘下的test.jar文件

    总之,使用URLClassLoader加载本地JAR文件是一种灵活的类加载方式,它允许我们动态扩展应用程序的功能,加载自定义的类库。正确理解和运用这个机制,可以极大地提升Java应用程序的可扩展性和灵活性。

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

    Spring bean 一般通过配置文件和注解进行加载,如果要实现jar或class文件,动态实现spring bean 的动态加载,并通过UrlClassLoader完成jar和class文件的加载。可以实现jar的热替换。spring的bean动态加载则需要对...

    springboot动态加载jar包到容器中,并映射为接口

    ### Spring Boot 动态加载 Jar 包到容器中并映射为接口的技术解析 #### 一、背景介绍 在实际的开发过程中,我们经常会遇到这样的需求:系统需要根据不同的业务场景来动态地加载不同的功能模块或者组件。这些功能...

    URLClassLoader中指定目录和jar的问题

    - 开发者可以基于`URLClassLoader`创建自己的类加载器,以满足特定需求,如实现动态加载、热更新等高级功能。 8. **源码分析**: - 分析`URLClassLoader`的源码有助于理解类加载机制的细节,例如类路径的处理、...

    Springboot + Hutool-db 使用 URLClassLoader 动态加载外部数据库和数据池 jar包实例

    在这个场景中,我们看到一个基于Springboot的应用程序结合了Hutool-db库,利用URLClassLoader来实现动态加载外部数据库驱动和数据池的jar包。这使得开发者可以在不重启应用的情况下更新或添加新的数据库连接和资源池...

    解决classloader的jar包

    包括commons-logging commons-beanutils commons-lang ezmorph json-lib-2.4-jdk15 commons-collections-3.2.1的jar包,可以解决 org/apache/commons/lang/exception/NestableRuntimeException的问题

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

    在Java编程中,有时我们需要动态地加载外部JAR文件,并执行其中特定的类方法,这在插件系统、模块化应用或动态扩展性需求中尤为常见。本篇将详细讲解如何实现这一目标。 首先,理解JAR(Java Archive)文件是Java...

    Eclipse打包成JAR包读取外部JAR包和外部配置文件

    6. 避免类加载问题,确保外部JAR包中的类能够被正确加载。 通过以上步骤,你就可以成功地在Eclipse中打包项目,并实现对外部JAR包和配置文件的正确引用。这不仅有助于项目部署,也有利于后续的维护和升级。

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

    Android系统提供了一个URLClassLoader,但该类加载器无法直接用于动态加载.jar文件。在这里,我们需要使用专门为Android设计的类加载器,如DexClassLoader和PathClassLoader。DexClassLoader可以加载.apk、.jar或....

    动态加载jar

    在Android开发中,动态加载JAR文件是一种常见的技术,它允许程序在运行时加载和执行新的功能或服务,而无需重新编译和安装整个应用程序。这样的设计极大地提高了灵活性,使得应用能够实现模块化,便于更新和维护。...

    动态编译、加载java类

    通过创建`URLClassLoader`实例并传入包含源码或编译后类的目录或JAR文件的URL,可以在运行时加载新编译的类。 4. **反射(Reflection)**: 在Java中,反射API允许程序在运行时检查和操作类、接口、字段和方法的信息...

    java动态添加外部jar包到classpath的实例详解

    URLClassLoader是一个专门用于加载外部jar包的类加载器,它可以从外部jar包中加载类文件。我们可以使用URLClassLoader来加载外部jar包,然后将其添加到classpath中。 下面是一个使用URLClassLoader加载外部jar包的...

    jar包隔离代码.zip

    2. OSGi(Open Service Gateway Initiative)框架:OSGi提供了模块化系统,允许在同一JVM中动态加载和卸载不同的jar包版本,实现类的隔离。 3. Spring Boot的ClassPathScanningCandidateComponentProvider:Spring ...

    定义ClassLoader调用外部jar包

    当我们需要从外部jar包动态加载类时,自定义ClassLoader就显得尤为关键。这篇博文"定义ClassLoader调用外部jar包"探讨了如何创建一个自定义的ClassLoader,以便能够灵活地加载不在应用主类路径(ClassPath)中的jar...

    动态加载类机制JAVA

    在Java编程语言中,动态加载类机制是一种强大的功能,它允许程序在运行时根据需要加载新的类或资源,而不是在编译时确定所有类。这种技术对于提高软件的灵活性、可扩展性和模块化至关重要,特别是在大型系统和插件式...

    java 反射运行时加载外部jar到Tomcat StandardClassLoader1

    默认情况下,它会从 `WEB-INF/lib` 目录下的 JAR 文件和 `WEB-INF/classes` 目录下的类文件中加载类。但是,如果我们需要在运行时动态添加 JAR 文件,由于 `URLClassLoader` 不公开 `addURL` 方法,我们需要使用反射...

    加载jar包中的spring配置文件

    当我们构建一个基于Spring的应用时,经常需要从jar包中加载配置文件,以便管理依赖注入和其它服务。在Spring中,我们通常使用`classpath:`或`classpath*:`前缀来指定资源的位置。这两个前缀在处理多个类路径位置时有...

    详解Java动态加载数据库驱动

    // 创建URLClassLoader,用于动态加载驱动JAR classLoader = new URLClassLoader(new URL[]{new URL("file:/path/to/driver/oracle9.jar")}, ClassLoader.getSystemClassLoader()); } // 获取数据库连接的方法...

    Struct jar 包

    在运行或部署应用时,JAR包会被Java虚拟机(JVM)加载,使得应用可以调用其中包含的类和方法。 4. **资源包**: 在Java开发中,资源包可能包含配置文件、图片、字体、音频等非代码文件。这些资源可以通过类路径...

Global site tag (gtag.js) - Google Analytics