Java呼び出しコンパイラでjavaファイルをコンパイル-馬兵士設計モードチュートリアル-ダイナミックエージェント.
// jdk6
public class CompilerTest {
//window \r\t
public static void main(String[] args) throws IOException, ClassNotFoundException, Exception {
// , java (E:\workspace\base)
System.out.println(System.getProperty("user.dir"));
// java ,
writejavaFile();
// java , javac
JavaCompiler javac=ToolProvider.getSystemJavaCompiler();
// jre , , javac , jdk , null
//
// ,
StandardJavaFileManager javafile=javac.getStandardFileManager(null, null, null);
String filename="D:/JavaTest.java";
// ,
Iterable units=javafile.getJavaFileObjects(filename);
//
CompilationTask t=javac.getTask(null, javafile, null, null, null, units);
t.call();
javafile.close();
//// D:/ class JavaTest.class
URL[] urls=new URL[]{new URL("file:/d:/")};
URLClassLoader classload=new URLClassLoader(urls);
Class clazz=classload.loadClass("JavaTest");
Method method=clazz.getMethod("main", String[].class);
// , Method invoke(Object,Object), main Run , 。
//Java main
//http://www.cnblogs.com/duancanmeng/archive/2012/04/14/2524614.html
method.invoke(clazz.newInstance(),(Object)new String[]{});
}
// java
public static void writejavaFile() throws IOException{
File file=new File("D:/JavaTest.java");
if(!file.exists()){
file.createNewFile();
}
FileWriter fw=new FileWriter(file);
fw.write(javaClassContent());
fw.close();
}
// java
public static String javaClassContent(){
String rt="\r
";
String java=new String();
java+="public class JavaTest{"+rt;
java+=" public static void main(String[] args){"+rt;
java+=" System.out.println(\"hello world\");"+rt;
java+=" show();"+rt;
java+=" }"+rt;
java+=" public static void show(){"+rt;
java+=" for(int i=0;i<4;i++){"+rt;
java+=" System.out.println(\"i=:\"+i);"+rt;
java+=" }"+rt;
java+=" }"+rt;
java+="}";
return java;
}
/**
* :
* hello world
* i=:0
* i=:1
* i=:2
* i=:3
*/
}
この文書は次のとおりです.http://blog.csdn.net/wxwzy738/article/details/7639344