使用JDK1.6编译器API动态编译java源代码实例
来源:互联网 发布:mysql集群架构 编辑:程序博客网 时间:2024/05/22 15:56
package test;
import java.io.IOException;
import java.lang.reflect.Method;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Arrays;
import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.SimpleJavaFileObject;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
import javax.tools.JavaCompiler.CompilationTask;
/**
* 使用java编译器API动态编译java源文件实例
* @author gyang
*
*/
public class T1 {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
//java源文件中须显示定义一个无参构造函数
String javaSource = "public class TestMain{public TestMain(){} public static void main(String[] args) {System.out.println(\"Hello World!\");} public void say(String words){System.out.println(words);}}";
StandardJavaFileManager javaFileManager = compiler.getStandardFileManager(null, null, null);
StringSourceJavaObject sourceObject = new T1.StringSourceJavaObject("TestMain", javaSource);
Iterable<? extends JavaFileObject> fileObjects = Arrays.asList(sourceObject);
CompilationTask task = compiler.getTask(null, javaFileManager, null, null, null, fileObjects);
boolean result = task.call();
if(result){
System.out.println("编译成功!");
Class c = Class.forName("TestMain");
Object o = c.newInstance();
Method m = c.getMethod("main", String[].class);
m.invoke(o, new Object[]{new String[]{}});//调用main函数
m = c.getDeclaredMethod("say", String.class);
m.invoke(o, "hahahahha!");//调用自定义函数
}
}
static class StringSourceJavaObject extends SimpleJavaFileObject{
private String content = null;
public StringSourceJavaObject(String name, String content) throws URISyntaxException {
super(URI.create("string:///" + name.replace('.', '/') + Kind.SOURCE.extension), Kind.SOURCE);
this.content = content;
}
@Override
public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException {
return content;
}
}
import java.io.IOException;
import java.lang.reflect.Method;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Arrays;
import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.SimpleJavaFileObject;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
import javax.tools.JavaCompiler.CompilationTask;
/**
* 使用java编译器API动态编译java源文件实例
* @author gyang
*
*/
public class T1 {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
//java源文件中须显示定义一个无参构造函数
String javaSource = "public class TestMain{public TestMain(){} public static void main(String[] args) {System.out.println(\"Hello World!\");} public void say(String words){System.out.println(words);}}";
//编译器函数接口
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();StandardJavaFileManager javaFileManager = compiler.getStandardFileManager(null, null, null);
StringSourceJavaObject sourceObject = new T1.StringSourceJavaObject("TestMain", javaSource);
Iterable<? extends JavaFileObject> fileObjects = Arrays.asList(sourceObject);
CompilationTask task = compiler.getTask(null, javaFileManager, null, null, null, fileObjects);
boolean result = task.call();
if(result){
System.out.println("编译成功!");
Class c = Class.forName("TestMain");
Object o = c.newInstance();
Method m = c.getMethod("main", String[].class);
m.invoke(o, new Object[]{new String[]{}});//调用main函数
m = c.getDeclaredMethod("say", String.class);
m.invoke(o, "hahahahha!");//调用自定义函数
}
}
static class StringSourceJavaObject extends SimpleJavaFileObject{
private String content = null;
public StringSourceJavaObject(String name, String content) throws URISyntaxException {
super(URI.create("string:///" + name.replace('.', '/') + Kind.SOURCE.extension), Kind.SOURCE);
this.content = content;
}
@Override
public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException {
return content;
}
}
}
运行结果:
- 使用JDK1.6编译器API动态编译java源代码实例
- 调用Java编译器API编译Java源代码
- 利用JDK1.6API 动态编译JAVA源文件
- java编译器API——使用编译工具
- 调用Java编译器API编译Java
- (转)调用Java编译器API编译Java
- 使用Java 6 API分析源代码
- Java api 全集 【API JDK1.6中文版】
- java api 全集 【API JDK1.6中文版】
- Java api 全集 【API JDK1.6中文版】
- Java api 全集 【API JDK1.6中文版】
- Java api 全集 【API JDK1.6中文版】
- java api 全集 【API JDK1.6中文版】
- Qt源代码使用Vs2013中VC编译器编译的流程
- 动态编译java程序实例
- Java动态编译源代码并加载执行
- 使用 Web API 作为动态 TypeScript 编译器运行环境
- 用java调用编译器编译java文件-动态代理
- asio openssl 使用
- 2.13 -实现Locate(L,x)返回x在链表中的位置
- 拦截win32 API
- ubuntu & android
- c# 结构体struct包含数与byte类型的转换(一)
- 使用JDK1.6编译器API动态编译java源代码实例
- 杭电2003 求绝对值
- 避免内存泄露, 有效利用内存 !
- 内核编译 & 模块编译
- hdu 2045 不容易系列之(3)—— LELE的RPG难题(递推)
- openGL 函数能正常执行,但是没有结果,该怎么办?方法之一
- 电影 《遗愿清单》
- 解决AcroPro缺少msi文件的错误方法
- Install Maven 3 on Ubuntu 11.04