在Jetty

时间:2017-12-04 13:38:16

标签: java jetty classloader lz4

我正在使用Jetty(8和9)以及LZ4 compression,我想使用LZ4的本机实现,LZ4是对C库的本机绑定。为此,应使用系统类加载器加载LZ4类。

所以我的问题是,如何在Jetty中使用系统类加载器加载外部jar。

将lib放入$ jetty.home / lib / ext并没有帮助,因为它加载了扩展类加载器而不是系统加载器。

1 个答案:

答案 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扩展行为和几乎消除Sys​​tem ClassLoader的概念)