使用Compiler API
使用Compiler API
/**
-
文件名: Compiler.java
-
版本信息: v1.0
-
日期: 2011-8-5
-
Copyright: Copyright(c) 2010
-
Corporation: 2011
-
Company: 广州正道科技有限公司
*/
package cn.sily.java6;
import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import javax.tools.JavaCompiler;
import javax.tools.JavaCompiler.CompilationTask;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
/**
-
名称: Compiler
-
描述: 动态编译文件,执行对应的方法
-
创建人: sily
-
创建时间: 2011-8-5 上午11:46:06
-
修改人:
-
修改时间:
-
修改备注:
-
@version 1.0
*/
public class Compiler {
public static void main(String[] args) {
try {
JavaCompiler jc = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager sjfm = jc.getStandardFileManager(null, null, null);
File file = new File(“d:/我的桌面/cn/sily/java6/Hello.java”);
Iterable fileObjects = sjfm.getJavaFileObjects(file);
CompilationTask ct = jc.getTask(null, sjfm, null, null, null, fileObjects);
ct.call();
sjfm.close();
//直接通过URLClassLoader
/**
-
使用默认的委托父 ClassLoader 为指定的 URL 构造一个新 URLClassLoader。
-
首先在父类加载器中搜索 URL,然后按照为类和资源指定的顺序搜索 URL。
-
这里假定任何以 ‘/’ 结束的 URL 都是指向目录的。如果不是以该字符结束,
-
则认为该 URL 指向一个将根据需要下载和打开的 JAR 文件。
-
使用本地文件路径必须要用到file:/开头 URL才能找到资源
-
URL[] urls = new URL[]{new URL(“file:/d:/我的桌面/”)};
-
<==>
-
File cfile= new File(“d:/我的桌面/”);
-
URL[] urls = new URL[]{cfile.toURL()};
*/
URL[] urls = new URL[]{new URL(“file:/d:/我的桌面/”)};
URLClassLoader urlc = new URLClassLoader(urls);
Class c = urlc.loadClass(“cn.sily.java6.Hello”);
//通过继承ClassLoader来动态加载类,路径可以是网络路径,本地文件路径
// MyClassLoader mycl = new MyClassLoader();
//
File cfile= new File(“F:/myeclipseworkspace/myproject/src/cn/sily/java6/Hello.class”);
// System.out.println(cfile.toURL());
//
Class c = mycl.loadClass(cfile.toURL().toString(),true);
Object o = c.newInstance();
Method m = o.getClass().getMethod(“getHelloWorld”, null);
Object str = m.invoke(o, null);
System.out.println(str);
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
-
文件名: Hello.java
-
版本信息: v1.0
-
日期: 2011-8-5
-
Copyright: Copyright(c) 2010
-
Corporation: 2011
-
Company: 广州正道科技有限公司
*/
package cn.sily.java6;
import java.util.Date;
/**
-
名称: Hello
-
描述:
-
创建人: sily
-
创建时间: 2011-8-5 上午11:44:55
-
修改人:
-
修改时间:
-
修改备注:
-
@version 1.0
*/
public class Hello {
public String getHelloWorld(){
return “现在时间:” + new Date();
}
}