JDK6.0如何使用Compiler API
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章将为大家详细讲解有关JDK6.0如何使用Compiler API,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。现在我们可以用JDK6 的Compiler A
千家信息网最后更新 2025年11月07日JDK6.0如何使用Compiler API
这篇文章将为大家详细讲解有关JDK6.0如何使用Compiler API,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
现在我们可以用JDK6 的Compiler API(JSR 199)去动态编译Java源文件,Compiler API结合反射功能就可以实现动态的产生Java代码并编译执行这些代码,有点动态语言的特征。这个特性对于某些需要用到动态编译的应用程序相当有用, 比如JSP Web Server,当我们手动修改JSP后,是不希望需要重启Web Server才可以看到效果的,这时候我们就可以用Compiler API来实现动态编译JSP文件,当然,现在的JSP Web Server也是支持JSP热部署的,现在的JSP Web Server通过在运行期间通过Runtime.exec或ProcessBuilder来调用javac来编译代码,这种方式需要我们产生另一个进程去做编译工作,不够优雅而且容易使代码依赖与特定的操作系统;Compiler API通过一套易用的标准的API提供了更加丰富的方式去做动态编译,而且是跨平台的。 下面代码演示了Compiler API的使用:
| public class CompilerAPITester { private static String JAVA_SOURCE_FILE = "DynamicObject.java"; private static String JAVA_CLASS_FILE = "DynamicObject.class"; private static String JAVA_CLASS_NAME = "DynamicObject"; public static void main(String[] args) { JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null); generateJavaClass(); try { //将产生的类文件拷贝到程序的ClassPath下面,下面这一行代码是特定于Windows+IntelliJ IDEA 6.0项目,不具有移植性 Runtime.getRuntime().exec("cmd /c copy "+JAVA_CLASS_FILE+" classesproductionJDK6Features"); Iterable sourcefiles = fileManager.getJavaFileObjects(JAVA_SOURCE_FILE); compiler.getTask(null, fileManager, null, null, null, sourcefiles).call(); fileManager.close(); Class.forName(JAVA_CLASS_NAME).newInstance();//创建动态编译得到的DynamicObject类的实例 } catch (Exception ex) { ex.printStackTrace(); } } public static void generateJavaClass(){ try { FileWriter fw = new FileWriter(JAVA_SOURCE_FILE); BufferedWriter bw = new BufferedWriter(fw); bw.write("public class "+JAVA_CLASS_NAME+"{"); bw.newLine(); bw.write("public "+JAVA_CLASS_NAME+"(){System.out.println("In the constructor of DynamicObject");}}"); bw.flush(); bw.close(); } catch (IOException ex) { ex.printStackTrace(); } } } |
程序运行后,会产生DynamicObject.java和DynamicObject.class两个文件,并在控制台输出:
In the constructor of DynamicObject
关于"JDK6.0如何使用Compiler API"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
编译
动态
代码
文件
程序
篇文章
方式
更多
运行
不错
实用
优雅
操作系统
一行
不够
两个
内容
功能
实例
应用程序
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
Excel建立共享数据库
arma3服务器游戏进不去
网络安全审核办法解读
数据库应该怎么玩
机关网络安全保密自查报告
网络技术综合题专项3
长宁区新时代软件开发参考价格
社会上安全从业人员数据库
orl数据库修改最大连接数
吉林正规服务器机柜虚拟主机
R星什么时候变成国内服务器
数据库课程设计小组心得
软件开发大学都有哪些
软件开发成本主要表现
用土豆服务器玩我的世界
出租数据库增值税率
拓宽校园网络安全防范维度
软件开发要几年经验
云南软件开发厂家价格
网络技术学院的毕业之后的学历
惠州惠城网络安全宣传
软件开发项目负责人干什么
保证了数据库的数据与程序
网络安全员证能找什么工作
ssm 配置多个数据库链接
武汉网络技术购买
游戏软件开发策划工资
苹果下载摩尔庄园是什么服务器
蓝鲸山东互联网科技有限公司
如何学会app软件开发