我想在JVM启动时加载一个额外的类。具体来说,应该在加载所有核心库之后加载该类(因此至少在rt.jar
和lib/ext
之后)。
该类未在任何地方引用。它包含一个静态块,用于设置JVM范围的代理,我们希望使用所有URL连接。
我尝试了-Xbootclasspath/a
,-Xbootclasspath/p
选项。将-verbose:class
添加到JVM_OPTS
以及-Xbootclasspath
变体创建的加载/打开输出表示所有核心库都已“加载”,而我的JAR只是“打开”。
有没有办法在所有核心类加载后,在JVM启动时强制加载一个类 - 或者更好的是JAR中的所有类?
答案 0 :(得分:0)
经过研究,我找不到比自定义类加载器更好的方法。
这是我写的。它本质上为所有类加载方法使用默认的类加载器,但提供对非静态初始化程序的访问,其中可以进行自定义类加载/引用。
public class CustomClassLoader extends ClassLoader {
{
// Custom class loading goes in this non-static initializer.
loadClass("java.org.myorganisation.package.MyClass");
}
public CustomClassLoader() {
super(CustomClassLoader.class.getClassLoader());
}
public CustomClassLoader(ClassLoader parent) {
super(parent);
}
}
通过定义系统属性-Djava.system.class.loader=com.anon.mypackage.CustomClassLoader
来指定自定义类加载器。