這是本文件的舊版!
Classloader Error: attempted duplicate class definition for name
Problem
在寫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; } }
Solutions