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