从java内部编译外部.java文件

从java内部编译外部.java文件,java,file,class,compilation,Java,File,Class,Compilation,我正在制作一个工具来编写.java文件,然后(希望)将这些文件编译成.class文件。在一个过程中,用户选择一个文件目录,其中写入了多个.java文件。现在我想让程序编译这些Java文件。JavaCompiler是您的朋友。检查文档 下面是一个关于如何使用编译器API的示例 JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); DiagnosticCollector<JavaFileObject> diagnost

我正在制作一个工具来编写.java文件,然后(希望)将这些文件编译成.class文件。在一个过程中,用户选择一个文件目录,其中写入了多个.java文件。现在我想让程序编译这些Java文件。

JavaCompiler
是您的朋友。检查文档

下面是一个关于如何使用编译器API的示例

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<>();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null);
Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjectsFromStrings(Arrays.asList("YouFileToCompile.java"));
JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, diagnostics, null,
        null, compilationUnits);
boolean success = task.call();
fileManager.close();
JavaCompiler compiler=ToolProvider.getSystemJavaCompiler();
DiagnosticCollector diagnostics=新建DiagnosticCollector();
StandardJavaFileManager fileManager=compiler.getStandardFileManager(诊断,null,null);

Iterable如果代码是从JRE运行的,
JavaCompiler
将为
null
。它需要一个JDK,其中包括
tools.jar

我尝试了这个,并用一个绝对路径替换了“YouFileToCompile.java”(问题?),现在我在:StandardJavaFileManager fileManager=compiler.getStandardFileManager(诊断,null,null)处得到一个NullPointerException;听起来
编译器
变量是
null
。确保您有正确的Java安装。查看此文件以获取帮助它必须是.java文件吗?如果我在.txt文件中有代码,它还会工作吗?另外,如果代码需要依赖项,例如ASM,我是否需要用应用程序编译ASM,还是只在我的主应用程序中使用它?