因此,java有一个内置库,专用于将Java源代码编译为.class文件,它位于中javax.tools
。因此,我想知道您如何才能正常工作。我已经阅读了javadoc,并在其中给出了一些示例,但是当我使用这些示例时,会出现错误。
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null);
这就是oracle给出的示例,以获取StandardJavaFileManager
该类的实例,您可以从该实例执行更多操作。但是,该代码的第一行存在一些问题。当我尝试这样做时ToolProvider.getSystemJavaCompiler();
,它总是返回null。在该方法的javadocs中,它说:“返回与此平台一起提供的编译器;如果未提供编译器,则返回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);
}
}
结果是:
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
如您所见,当我专门运行JDK版本时很好,但是在运行JRE版本时却得到null。检查您如何启动Java。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句