我正在使用Jetty(8和9)以及LZ4 compression,我想使用LZ4的本机实现,LZ4是对C库的本机绑定。为此,应使用系统类加载器加载LZ4类。
所以我的问题是,如何在Jetty中使用系统类加载器加载外部jar。
将lib放入$ jetty.home / lib / ext并没有帮助,因为它加载了扩展类加载器而不是系统加载器。
答案 0 :(得分:1)
当Jetty启动时,它会实例化一个自定义ClassLoader以符合各种规范要求(JSP,CDI,OSGi,Java9等)。
System ClassLoader基本上只存在于保存JVM(以及可选的XBootClasspath和JVM扩展)相关的jar。
Jetty lib/ext
与JVM扩展机制无关,不会让这两者混淆。
在Jetty参与ClassLoader之前,可能需要通过JVM的各种扩展机制加载LZ4压缩jar。
像...一样的东西。
$ java <load_LZ4_jars_via_ext_stuff> -jar start.jar
# example
$ java -Djava.ext.dirs=/full/path/to/lz4.jar -jar start.jar
注意:Java 9会再次更改所有内容,因此您现在学到的任何内容都必须被遗忘,并且您需要使用新的Java 9技术(请参阅JEP 220及其弃用/替换JVM扩展行为和几乎消除System ClassLoader的概念)