新加一个jar还好办,可以用URLClassLoader,如果替换的话就要重写一个ClassLoader了,不过如果替换的话一般的手法还真没什么着,最好参考一下JBoss的Hot Deploy的实现
解决方案 »
- 一个简单的需求,求更高效的算法
- JDK 与 Jrockit的 Calendar类处理日期有什么区别?
- 用POI写Excel文件, 发现默认字体为Arial,能否修改默认字体
- java新手提问,望大家帮忙
- 布局问题,高手看看怎么回事。
- spring、ibatis和mysql中关于主键自动生成的问题求解
- 兄弟们我下载了一个j2eesdk-1_4_02_2005Q2-windows-ml.exe安装完成后,安装目录里面还有jdk目录.....
- 请问jcreator中关于java的帮助文档哪里有下载?
- 我调用dll动态连接库出现问题?
- 有谁看过电子工业出版社出的JAVA2从入门到精通吗?这本是入门级的吗?
- 关于多线程
- 十万个为什么之“关于初始化”
package org.ofbiz.base.start;import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.StringTokenizer;
import java.util.Vector;/**
* Class to handle CLASSPATH construction
* @author Jan Hlavat?
*/
public class Classpath { Vector _elements = new Vector(); public Classpath() {} public Classpath(String initial) {
addClasspath(initial);
} public boolean addComponent(String component) {
if ((component != null) && (component.length() > 0)) {
try {
File f = new File(component);
if (f.exists()) {
File key = f.getCanonicalFile();
if (!_elements.contains(key)) {
_elements.add(key);
return true;
}
}
} catch (IOException e) {}
}
return false;
} public boolean addComponent(File component) {
if (component != null) {
try {
if (component.exists()) {
File key = component.getCanonicalFile();
if (!_elements.contains(key)) {
_elements.add(key);
return true;
}
}
} catch (IOException e) {}
}
return false;
} public boolean addClasspath(String s) {
boolean added = false;
if (s != null) {
StringTokenizer t = new StringTokenizer(s, File.pathSeparator);
while (t.hasMoreTokens()) {
added |= addComponent(t.nextToken());
}
}
return added;
} public String toString() {
StringBuffer cp = new StringBuffer(1024);
int cnt = _elements.size();
if (cnt >= 1) {
cp.append(((File) (_elements.elementAt(0))).getPath());
}
for (int i = 1; i < cnt; i++) {
cp.append(File.pathSeparatorChar);
cp.append(((File) (_elements.elementAt(i))).getPath());
}
return cp.toString();
} public URL[] getUrls() {
int cnt = _elements.size();
URL[] urls = new URL[cnt];
for (int i = 0; i < cnt; i++) {
try {
urls[i] = ((File) (_elements.elementAt(i))).toURL();
} catch (MalformedURLException e) {}
}
return urls;
} public ClassLoader getClassLoader() {
URL[] urls = getUrls(); ClassLoader parent = Thread.currentThread().getContextClassLoader();
if (parent == null) {
parent = Classpath.class.getClassLoader();
}
if (parent == null) {
parent = ClassLoader.getSystemClassLoader();
}
return new URLClassLoader(urls, parent);
}
}
改变的代码如下:
private Classpath classPath = new Classpath(System.getProperty("java.class.path"));
System.setProperty("java.class.path", classPath.toString());
ClassLoader classloader = classPath.getClassLoader();
Thread.currentThread().setContextClassLoader(classloader);
主要是通过ClassLoader来完成应该可以满足你的要求。
根本不需要这么复杂的