toolprovider.getsystemjavacompiler()返回null

时间:2014-11-10 19:11:20

标签: java-compiler-api

首先,我看到很多关于JavaCompilerAPI使用的问题,我想澄清一下,我正在创建一个在线模拟构建器,它从用户那里获取太多输入来预先创建类。这就是我使用java编译器来使用用户输入编写类的原因。

关于我的问题,我已经测试了一些基本的编译器程序,目前正在使用这里的代码:Dynamic Compiling Without Create Physical File

代码的编译是成功的,但是当我运行代码时,
    ToolProvider.getSystemJavaCompiler(); 返回null。

从其他条目中我了解到一个原因可能是默认的java.home是JRE,所以我添加了将java home设置为我的JDK版本的行:

System.setProperty("java.home", "C:\\Program Files (x86)\\Java\\jdk1.7.0_51;");

我还使用我的程序将tools.jar添加到该文件夹​​中,并在类路径中调用指定tools.jar的程序,如下所示:

java -cp ".;tools.jar" Compiler

这些方法没有改变任何东西。关于可能出现什么问题的任何想法?

import java.io.IOException;
import java.net.URI;
import java.util.Arrays;
import java.util.Locale;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.tools.JavaCompiler.CompilationTask;
import javax.tools.*;

public class Compiler {

    static final Logger logger = Logger.getLogger(Compiler.class.getName());
        static String sourceCode = "class HelloWorld{"
        + "public static void main (String args[]){"
        + "System.out.println (\"Hello, dynamic compilation world!\");"
        + "}"
        + "}";

    public void doCompilation() {
        System.out.println(System.getProperty("java.home"));
        System.setProperty("java.home", "C:\\Program Files (x86)\\Java\\jdk1.7.0_51;");
        System.out.println(System.getProperty("java.home"));
        SimpleJavaFileObject fileObject = new DynamicJavaSourceCodeObject("HelloWorld",sourceCode);
        JavaFileObject javaFileObjects[] = new JavaFileObject[]{fileObject};

        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
        System.out.println(compiler);

        StandardJavaFileManager stdFileManager = compiler.getStandardFileManager(null, Locale.getDefault(), null);

...

0 个答案:

没有答案