這是本文件的舊版!


Classloader Error: attempted duplicate class definition for name

在寫plugin相關程式時,會去override classloader做成自己想要的載入形式。而這陣子,偶爾會發生如以下Error:

ava.lang.LinkageError: loader (instance of  org/tonylin/FunnyClassLoader): attempted  duplicate class definition for name: "org/apache/commons/cli/BasicParser"
而我們的實做是去extend java.net.URLClassLoader,其中關鍵程式碼如下:
private Class<?> loadClass(String className) {
	Class<?> clazz = findLoadedClass(className);
	if (clazz != null) {
		return clazz;
	}
 
	// load locally
	try {
		clazz = findClass(className);
		return clazz;
	} catch (ClassNotFoundException e) {
		// ignore
	}
 
	// use the standard URLClassLoader (which follows normal parent
	// delegation)
	try {
		return super.loadClass(className);
	} catch (ClassNotFoundException e) {
		return null;
	}
}