java中的CompileAPI入门及使用
2021-04-12 15:31
标签:mpi list out 参数 lan tac iter javac arc java5之前我们可以通过java提供的tools.jar来操作java编译器,java6提供了新的API,让我们可以更方便的调用。包名为javax.tools。 结果为0表示编译成功,在相同目录下生成了Client.class文件。 java还提供了编译其他形式的源文件的功能,如内存字符串文本,数据库读取的文本。 接下来实现从内存中读取待编译对象 结果编译成功。 java中的CompileAPI入门及使用 标签:mpi list out 参数 lan tac iter javac arc 原文地址:https://www.cnblogs.com/strongmore/p/13350587.html介绍
使用
通过文件编译
String filePath = "D:\\Client.java";
//获取java编译器
JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler();
//编译
int result = javaCompiler.run(null, null, null, filePath);
System.out.println(result);
编译参数依次为
通过非文件格式编译
public class JavaFileManagerMain {
public static void main(String[] args) {
//文件路径
String fullQuanlifiedFileName = "D:\\Client.java";
//获取编译器
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
//获取文件管理器 参数依次为错误监听器,区域对象,编码
StandardJavaFileManager fileManager =
compiler.getStandardFileManager(null, null, null);
//通过文件全路径获取要编译的文件对象
Iterable extends JavaFileObject> files =
fileManager.getJavaFileObjectsFromStrings(
Arrays.asList(fullQuanlifiedFileName));
//创建编译任务 参数为错误输出流,文件管理器,错误处理器,编译器选项,参与编译的class,带编译的java文件
JavaCompiler.CompilationTask task = compiler.getTask(
null, fileManager, null, null, null, files);
//执行任务
Boolean result = task.call();
if (result) {
System.out.println("Succeeded");
}
}
}
public class StringObject extends SimpleJavaFileObject {
private String content = null;
protected StringObject(String className, String contents) throws URISyntaxException {
super(new URI(className), Kind.SOURCE);
this.content = contents;
}
@Override
public CharSequence getCharContent(boolean ignoreEncodingErrors) {
return content;
}
}
public class StringClassCompilerMain {
public static void main(String[] args) {
JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager standardJavaFileManager = javaCompiler.getStandardFileManager(null, null, null);
JavaFileObject testFile = generateTest();
Iterable extends JavaFileObject> classes = Arrays.asList(testFile);
JavaCompiler.CompilationTask task = javaCompiler.getTask(null, standardJavaFileManager, null, null, null, classes);
if (task.call()) {
System.out.println("success");
} else {
System.out.println("failure!");
}
}
//通过字符串创建一个待编译对象
private static JavaFileObject generateTest() {
String contents = "package com.imooc.sourcecode.java.javacompile.test3;" +
"class Test {\n" +
" public static void main(String[] args) {\n" +
" System.out.println(\"success\");\n" +
" }\n" +
"}\n";
StringObject so = null;
try {
so = new StringObject("com.imooc.sourcecode.java.javacompile.test3.Test", contents);
} catch (URISyntaxException e) {
e.printStackTrace();
}
return so;
}
}
上一篇:JAVA多线程学习七-线程池
下一篇:java知识学习16-构造方法
文章标题:java中的CompileAPI入门及使用
文章链接:http://soscw.com/index.php/essay/74780.html