在 Jetty 中使用系统 class 加载程序加载外部 jar
Load external jar with system class loader in Jetty
我正在使用 Jetty(8 和 9)以及 LZ4 compression,我想使用 LZ4 的本机实现,它是对 C 库的本机绑定。为此,LZ4 classes 应使用系统 class 加载程序进行加载。
所以我的问题是,如何在 Jetty 中使用系统 class 加载程序加载外部 jar。
将库放入 $jetty。home/lib/ext 没有帮助,因为它是用扩展 class 加载器而不是系统加载器加载的。
当 Jetty 启动时,它会实例化一个自定义类加载器以符合各种规范要求(JSP、CDI、OSGi、Java9 等)
System ClassLoader 基本上只存在于保存 JVM(以及可选的 XBootClasspath 和 JVM 扩展)相关的 jar。
Jetty lib/ext
与 JVM 扩展机制无关,不要混淆这两个。
也许您的 LZ4 压缩 jar 需要通过 JVM 的各种扩展机制加载,然后 Jetty 才参与到类加载器中。
类似...
$ java <load_LZ4_jars_via_ext_stuff> -jar start.jar
# example
$ java -Djava.ext.dirs=/full/path/to/lz4.jar -jar start.jar
注意:Java9 再次改变了一切,因此您现在所学的一切都将被遗忘,您将需要使用新的 Java9 技巧(参见 JEP 220及其 deprecation/replacement 的 JVM 扩展行为和几乎消除系统类加载器的概念)
我正在使用 Jetty(8 和 9)以及 LZ4 compression,我想使用 LZ4 的本机实现,它是对 C 库的本机绑定。为此,LZ4 classes 应使用系统 class 加载程序进行加载。
所以我的问题是,如何在 Jetty 中使用系统 class 加载程序加载外部 jar。
将库放入 $jetty。home/lib/ext 没有帮助,因为它是用扩展 class 加载器而不是系统加载器加载的。
当 Jetty 启动时,它会实例化一个自定义类加载器以符合各种规范要求(JSP、CDI、OSGi、Java9 等)
System ClassLoader 基本上只存在于保存 JVM(以及可选的 XBootClasspath 和 JVM 扩展)相关的 jar。
Jetty lib/ext
与 JVM 扩展机制无关,不要混淆这两个。
也许您的 LZ4 压缩 jar 需要通过 JVM 的各种扩展机制加载,然后 Jetty 才参与到类加载器中。
类似...
$ java <load_LZ4_jars_via_ext_stuff> -jar start.jar
# example
$ java -Djava.ext.dirs=/full/path/to/lz4.jar -jar start.jar
注意:Java9 再次改变了一切,因此您现在所学的一切都将被遗忘,您将需要使用新的 Java9 技巧(参见 JEP 220及其 deprecation/replacement 的 JVM 扩展行为和几乎消除系统类加载器的概念)