问题
I'm trying to tell the JVM to use my custom ClassLoader as default ClassLoader
This is the VM argument i use to pick my class:
-Djava.system.class.loader=JarClassLoader
and this is the error i get
Error occurred during initialization of VM
java.lang.Error: java.lang.NoSuchMethodException: JarClassLoader.<init>(java.lang.ClassLoader)
at java.lang.ClassLoader.initSystemClassLoader(Unknown Source)
at java.lang.ClassLoader.getSystemClassLoader(Unknown Source)
Caused by: java.lang.NoSuchMethodException: JarClassLoader.<init>(java.lang.ClassLoader)
at java.lang.Class.getConstructor0(Unknown Source)
at java.lang.Class.getDeclaredConstructor(Unknown Source)
at java.lang.SystemClassLoaderAction.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.lang.ClassLoader.initSystemClassLoader(Unknown Source)
at java.lang.ClassLoader.getSystemClassLoader(Unknown Source)
Do i have to define a specific method or am i using the wrong argument?
回答1:
Custom ClassLoader
public class CustomClassLoader extends ClassLoader{
public CustomClassLoader(ClassLoader classLoader) {
super(classLoader);
}
@Override
public Class<?> loadClass(String name) throws ClassNotFoundException {
System.out.println("Loading class :" + name);
return super.loadClass(name);
}
}
Main Class
public class Main {
public static void main(String[] args) {
System.out.println("Starting main");
}
}
VM arguments: -Djava.system.class.loader=CustomClassLoader
All classes are in default package and it executes successfully.
Output:
Loading class :Main
Starting main
来源:https://stackoverflow.com/questions/13498741/define-custom-system-classloader