菜鸟 请教个问题哈 用URLClassload来加载自己打包的jar包,在控制台用main方法测试通过,为什么发布成服务后就load不进来那个jar包了呢?
说明:是在本机上用tomcat做测试!不过将来是要到不同机子上做测试的,还有能用jar包的相对路径访问就更好了,然后用http://localhost:8080/XXXX/agent.jar加载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包。
恩 就是这个样子了 还请给出详细解决办法 谢谢!
转载于:https://www.cnblogs.com/hfyuqiang/archive/2013/05/16/3082494.html