Java编译器API不起作用,我一直无法解析类javax.tools.JavaCompilerTool和其他类似的类

Java编译器API不起作用,我一直无法解析类javax.tools.JavaCompilerTool和其他类似的类,java,compiler-construction,compilation,Java,Compiler Construction,Compilation,我已经读到Java6有一个编译器api,它允许您从其他Java代码编译Java文件。然而,每当我尝试导入任何此类类(例如javax.tools.JavaCompilerTool)时,我都会得到一个 unable to resolve class javax.tools.JavaCompilerTool 我搜索了jdk1.6.0_26安装目录中的所有jar文件,在javax.tools包中的任何jar文件中都没有找到对JavaCompilerTool的引用 我的理解是,这个功能在1.6JDK中。

我已经读到Java6有一个编译器api,它允许您从其他Java代码编译Java文件。然而,每当我尝试导入任何此类类(例如javax.tools.JavaCompilerTool)时,我都会得到一个

unable to resolve class javax.tools.JavaCompilerTool
我搜索了jdk1.6.0_26安装目录中的所有jar文件,在javax.tools包中的任何jar文件中都没有找到对JavaCompilerTool的引用

我的理解是,这个功能在1.6JDK中。我使用\bin目录中的java.exe运行应用程序,而不是\jre\bin目录中的java.exe,但不管这两个目录是否工作

我错过了什么?如何才能找不到该类。

您需要使用该类。请看一下使用说明

例如:

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjectsFromFiles(Arrays.asList(new File("HelloWorld.java")));
compiler.getTask(null, fileManager, null, null, null, compilationUnits).call();
fileManager.close();
JavaCompiler compiler=ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager=compiler.getStandardFileManager(null,null,null);

Iterable我在jdk6rt.jar中看到了
javax.tools.JavaCompiler
。可能您的类名不正确。

这是编译时错误还是运行时错误?(我不知道它是Oracle的compiletime版本)。如果是运行时,您具体是如何运行它的?作为servletcontainer上的webapp还是什么?如果是这样,您确定servletcontainer正在使用JDK的JRE吗?我是从命令行(Windows7 64位下的.bat文件)运行它的。该错误是一个运行时错误。我启动一个java应用程序,然后启动一个GroovyScript引擎,它运行一个groovy文件,然后尝试导入JavaCompilerTool。我确信我使用的是JDK的java.exe,但是如果我从groovy脚本print System.getProperty(“java.home”)将其指向\jre\bin目录。但我不确定这是否是一个可靠的检查。如果我将导入放在主java文件中(甚至在groovy启动之前),我会得到一个“找不到符号”关于import javax.tools.JavaCompilerTool;。同样的问题请参阅我对下面答案的答复。你确定路径必须反映jdk\bin目录吗?它似乎在不反映它的情况下工作,我确定我在从.bat文件运行时指向jdk\bin\java.exe文件我还没有机会完全尝试此解决方案,但添加了导入用于导入javax.tools.JavaCompiler;导入javax.tools.ToolProvider;导入javax.tools.StandardJavaFileManager;不要在运行时中断,因此我在google上找到的所有示例都一定是错误的。我需要在有机会时尝试您的代码,但它看起来很有希望。谢谢。查看一下Javadocs,或者取而代之:)例如,我尝试了你的代码,它从我的Java文件生成了一个.class文件。我称之为成功。谢谢你的帮助。