所以,java有一个内置的库,专门用于将java源代码编译成.class文件,它就在javax.tools.所以,我想知道你究竟是如何让它发挥作用的.我已经阅读了javadoc,并在那里给出了一些示例,但是当我使用这些示例时,我会遇到错误.
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null);
Run Code Online (Sandbox Code Playgroud)
这是oracle提供的示例,以便获取StandardJavaFileManager可以从中执行更多操作的类的实例.但是,我在该代码的第一行遇到了一些问题.当我尝试这样做时ToolProvider.getSystemJavaCompiler();,它总是返回null.在该方法的javadoc中,它表示"返回此平台提供的编译器,如果没有提供编译器,则返回null." 但他们从未表现出任何其他方式获得一个实例JavaCompiler.我已经尝试了许多其他方法,例如使用a ServiceLoader来找到我能够提供的任何参考,但不会占上风.我怎么能让这个工作?
您可能正在从JRE目录而不是JDK目录运行Java - 您需要运行一个"知道"Java编译器所在位置的版本.
所以,例如,在我的Windows拳击上,运行这样一个小测试应用程序:
import javax.tools.*;
class Test {
public static void main(String[] args) {
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
System.out.println(compiler);
}
}
Run Code Online (Sandbox Code Playgroud)
结果是:
c:\Users\Jon\Test>"\Program Files\Java\jdk1.7.0_09"\bin\java Test
com.sun.tools.javac.api.JavacTool@1e0f2f6
c:\Users\Jon\Test>"\Program Files\Java\jre7\bin\java" Test
null
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,当我专门运行JDK版本时它很好,但是在运行JRE版本时我得到null.检查你是如何开始Java的.
| 归档时间: |
|
| 查看次数: |
450 次 |
| 最近记录: |