在运行时从不同的(模块化)JDK加载类

时间:2019-01-09 14:21:59

标签: java classloader javac java-9

我想在运行时使用给定的JDK编译Java文件(用于测试注释处理器等)。我正在使用ToolProvider.getSystemJavaCompiler()获取javac的实例。

javac具有-bootclasspath--system(JDK9 +)选项来更改编译源所依据的JDK。但是,如果宿主项目是针对JDK8编译的,则ToolProvider.getSystemJavaCompiler()返回的实例将是不知道javac选项的JDK8 --system,因此无法针对JDK9进行编译。同样,--system选项不适用于非模块化JDK(JDK8或更早版本)。

所以我的想法是从给定的JDK动态加载ToolProvider类,而不是使用宿主项目的系统编译器,然后在那更改JDK。对于JDK8,我应该能够使用URLClassLoaderrt.jartools.jar来做到这一点,但是如何将类加载器添加到不再具有JAR的模块化JDK中?

0 个答案:

没有答案