JDK6新特性之Compiler
来源:互联网 发布:尿液发红什么原因知乎 编辑:程序博客网 时间:2024/04/29 15:12
浏览了JDK6的新特性,感觉Compiler API的应用有很大空间,它提供对代码的编译功能也就意味着在运行时可以实现代码编辑,编译及加载运行. 可以在系统运行中动态配置和扩展用户自定义的功能,甚至可以把Java语句作为脚本内嵌到原有系统中扩充功能集.
下面是我参阅Jdk6 API Document测试Compiler的例子.开发环境:Window XP+JDK1.6+Eclipse3.2
- Step1:创建一个Java项目Test
一定要确认JRE的配置,进入Configure JREs...如下图:
如果JDK不是来源于JDK下的Jre会引发ToolProvider获取不到compiler. 在缺省状态,Eclipse会搜索到Jre1.6..0安装目录下的Jre. 此目录下不包含Compiler工具Javac,需要下载安装JDK1.6.
- Step2:准备好待编译文件Hello.java和测试代码Compiler.java.
创建目录C:/Java/SWT/src/com/gotop/study,编写Hello.java,代码没有限制,可自行编写一个:
//Hello.java
package com.gotop.study;
import java.util.Date;
public class Hello
{
public String getHelloWorld()
{
return "现在的时间为:"+new Date();
}
}
//Compiler.java
package com.gotop.study.swt;
import java.io.File;
import javax.tools.JavaCompiler;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
publicclass Compiler {
publicstaticvoid main(String args[]) {
try {
JavaCompiler jc = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager sjfm = jc.getStandardFileManager(null, null, null);
File javaFile = new File("c:/java/swt/src/com/gotop/study/Hello.java");
Iterable fileObjects = sjfm.getJavaFileObjects(javaFile);
jc.getTask(null, sjfm, null, null, null, fileObjects).call();
// Add more compilation tasks
sjfm.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行即可,在目录C:/Java/SWT/src/com/gotop/study/下你发现:Hello.class表示Compiler run OK.
如果出现以下异常:
java.lang.NullPointerException
at com.gotop.study.swt.Compiler.main(Compiler.java:14)
说明你的JRE设置有问题.
关于Compiler的使用,如设置编译参数等可以参考以下Link,有比较详尽的描述:
https://openjdk.dev.java.net/compiler/guide/compilerAPI.html
http://java.sun.com/javase/6/docs/api/javax/tools/ToolProvider.html
- JDK6新特性之Compiler
- JDK6的新特性之四:使用Compiler API
- JDK6的新特性之四:使用Compiler API
- JDK6的新特性之四:使用Compiler API
- JDK6新特性之二 使用Compiler API
- JDK6的新特性之四:使用Compiler API
- JDK6的新特性之四:使用Compiler API
- jdk6新特性
- JDK6 新特性
- JDK6的新特性
- JDK6的新特性
- JDK6的新特性
- JDK6新特性
- JDK6的新特性
- JDK6的新特性
- jdk6.0新特性
- JDK6新特性一览
- JDK6的新特性
- 《The Amtrak Wars I : Cloud_Warrior》01
- 《The Amtrak Wars I : Cloud_Warrior》02
- 《The Amtrak Wars I : Cloud_Warrior》03
- 《The Amtrak Wars I : Cloud_Warrior》04
- 《The Amtrak Wars I : Cloud_Warrior》05
- JDK6新特性之Compiler
- 访问 IIS 元数据库失败
- 《The Amtrak Wars I : Cloud_Warrior》06
- 一个队列模块的接口 用链表
- 章三 软件体系结构组态分析与应用
- 创建Oracle10g数据库
- 《The Amtrak Wars I : Cloud_Warrior》07
- 《The Amtrak Wars I : Cloud_Warrior》08
- 链表实现的队列