编译器API
调用编译器
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
发起编译任务
JavaCompiler.CompilationTask task = compiler.getTask(......);
package 第8章脚本编译与注解;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
package 第8章脚本编译与注解;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
public class JavaCompilerAdvancedExample {
public static void main(String[] args) {
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
if (compiler == null) {
System.out.println("Could not get Java compiler.");
return;
}
String sourceFilePath = "./src/第8章脚本编译与注解/HelloWorld.java";
File sourceFile = new File(sourceFilePath);
// 自定义输出目录
String outputDirectory = "./src/第8章脚本编译与注解/output";
File outputDir = new File(outputDirectory);
if (!outputDir.exists()) {
outputDir.mkdirs();
}
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
Iterable<? extends JavaFileObject> compilationUnits;
try {
compilationUnits = fileManager.getJavaFileObjects(sourceFile);
JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, null,
Arrays.asList("-d", outputDirectory), null, compilationUnits);
boolean success = task.call();
if (success) {
System.out.println("Compilation successful.");
} else {
System.out.println("Compilation failed.");
}
} finally {
try {
if (fileManager!= null) {
fileManager.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}