从您的问题尚不清楚,您为什么要寻找这样的类加载器隔离。因此,我在这里总结nashorn的类加载器-也许,您会找到想要的东西。
Nashorn和类加载器:
- Nashorn类(jdk.nashorn。*)由Java扩展类加载器加载
- 生成的脚本类,适配器(子类,脚本的接口实现)由nashorn的内部类加载器加载。
- 从脚本引用的Java类由Nashorn的“应用类加载器”加载。
(1)和(2)无法自定义。nashorn代码中假设它是特权代码。并且有关于通用脚本类加载器和适配器加载器的假设。
(3)默认是创建nashorn引擎时的线程上下文类加载器。如果线程上下文类加载器为null,则使用Nashorn自己的加载器(扩展加载器)。
因此,如果在通过Thread.setContextClassLoader
API设置了合适的线程上下文加载器之后创建了Nashorn引擎,则可以控制脚本引擎的“应用程序类加载器”。
如果可以使用NashornscriptEngineFactory(特定于nashorn的API
https://docs.oracle.com/javase/8/docs/jdk/api/nashorn/jdk/nashorn/api/scripting/NashornscriptEngineFactory.html)创建脚本引擎,您也可以通过编程方式将任何类加载器作为“应用类加载器”传递。您可能要签出接受ClassLoader参数的NashornscriptEngineFactory方法。
除了“应用程序类加载器”外,您还可以选择在“应用程序类加载器”之前搜索其他附加的类加载器。这由“ -cp”或“ -classpath”
nashorn命令行选项指定。请注意,您可以通过“
nashorn.args”系统属性为脚本引擎指定nashorn命令行选项,也可以使用NashornscriptEngineFactory类的getscriptEngine方法以编程方式传递。另请参阅:https
:
//wiki.openjdk.java.net/display/Nashorn/Nashorn+jsr223+engine+notes
希望这可以帮助。



