ToolProvider.getSystemJavaCompiler()始终使用jdk返回null

时间:2017-09-07 12:37:51

标签: java tools.jar

我阅读了有关此问题的所有帖子,没有解决方案适用于我,我总是null

我使用JRE并将tools.jar放在lib目录中,将其添加到构建路径中,但是当我想跳转到声明时Eclipse希望跳转到 rt.jar (?)我完全不知道#39;理解。
这可能是我只得null的原因吗?如何正确配置?

getSystemJavaCompiler()返回null的标准是什么?

Preferences screenshot

2 个答案:

答案 0 :(得分:1)

JRE是Java 运行时环境。它没有编译器,因此您获得null。如果使用完整的JDK,则会得到非空结果。

答案 1 :(得分:0)


我找到了解决问题的方法。首先我再次使用了jre。我把tools.jar放在应用程序的lib目录中 ToolProvider.getSystemJavaCompiler()返回 null
这是获取JavaCompiler的解决方法:

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
if (compiler == null){
    try {
        Class<?> javacTool = Class.forName("com.sun.tools.javac.api.JavacTool");
        Method create = javacTool.getMethod("create");
        compiler = (JavaCompiler) create.invoke(null);
    } catch (Exception e) {
        throw new AssertionError(e);
    }