首页 > 代码库 > java_基础——在代码里编译.java文件
java_基础——在代码里编译.java文件
【本文介绍】
本文不是深入理解和使用java编译器,只是在代码里编译.java文件的helloWorld。这种技术还是蛮有意思的,说不定在将来的某些只能化项目会运用到!^_^
【编译最基础的流程】
【java代码】
1 package com.zjm.www.test; 2 3 import java.io.IOException; 4 5 import javax.tools.JavaCompiler; 6 import javax.tools.JavaCompiler.CompilationTask; 7 import javax.tools.StandardJavaFileManager; 8 import javax.tools.ToolProvider; 9 10 public class Test {11 12 public static void main(String[] args) {13 14 // 获取.java文件路径15 String fileName = System.getProperty("user.dir")+16 "\\src\\com\\zjm\\www\\test\\TankTimeProxy.java";17 18 /**19 * ToolProvider类:该类是为查找工具提供者提供方法,例如,编译器的提供者。)20 * getSystemJavaCompiler:获取此平台提供的 Java™ 编程语言编译器。21 */22 JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();23 24 /**25 * getStandardFileManager: 为此工具获取一个标准文件管理器实现的新实例。26 * 参数:27 * diagnosticListener - 用于非致命诊断信息的诊断侦听器;如果为 null,则使用编译器的默认方法来报告诊断信息28 * locale - 格式化诊断信息时要应用的语言环境;如果为 null,则使用默认语言环境。29 * charset - 用于解码字节的字符集;如果为 null,则使用平台默认的字符集 30 * 返回:31 * 标准文件管理器32 *33 */34 StandardJavaFileManager fileMgr = compiler.getStandardFileManager(null,null,null);35 36 /**37 * getJavaFileObjects:获取表示给定文件的文件对象。38 * 参数:39 * files - 文件数组 40 * 返回:41 * 文件对象列表42 */43 Iterable units = fileMgr.getJavaFileObjects(fileName);44 45 /**46 * getTask:使用给定组件和参数创建编译任务的 future47 * 参数:48 * out - 用于来自编译器的其他输出的 Writer;如果为 null,则使用 System.err49 * fileManager - 文件管理器;如果为 null,则使用编译器的标准文件管理器50 * diagnosticListener - 诊断侦听器;如果为 null,则使用编译器的默认方法报告诊断信息51 * options - 编译器选项;null 表示没有选项52 * classes - 类名称(用于注释处理),null 表示没有类名称53 * compilationUnits - 要编译的编译单元;null 表示没有编译单元 54 * 返回:55 * 表示编译的对象56 */57 CompilationTask t = compiler.getTask(null,null,null,null,null,units);//编译任务58 59 //6 开始编译60 t.call();61 62 //7 关闭“java编译器”63 try {64 fileMgr.close();65 } catch (IOException e) {66 e.printStackTrace();67 }68 }69 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。