Java 动态编译

代码

package test;

import java.io.*;
import java.lang.reflect.*;
import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;

public class CompileTest {

    
static com.sun.tools.javac.Main javac = new com.sun.tools.javac.Main();

    
public static void main(String[] args) {
        
try {
            String strClassname 
= "Test1";
            String strFile
=System.getProperty("user.dir")+"\\"+strClassname+".java";
            File file 
=new File(strFile);
            
////File.createTempFile("RunTime", ".java", new File(System.getProperty("user.dir")));
            String filename = file.getName();
            PrintWriter out 
= new PrintWriter(new FileOutputStream(file));
            out.println(
"public class " + strClassname + "{\n");
            out.println(
"public static void main(String[] args){\n");
            out.println(
"System.out.println(\"你好!\");\n");
            out.println(
"}\n}\n");
            out.flush();
            out.close();
            String[] arg 
= new String[]{"-d", System.getProperty("user.dir"), filename};
            
//String[] arg = new String[]{"-d", System.getProperty("user.dir")+"/build/classes", filename};
            javac.compile(arg);
            
            URL classpath 
= new URL("file:/" + System.getProperty("user.dir"+ "/");
            URLClassLoader classLoader 
= new URLClassLoader(new URL[] { classpath });
            Class cls 
= classLoader.loadClass(strClassname);
            Method main 
= cls.getMethod("main"new Class[]{String[].class});
            main.invoke(
nullnew Object[]{new String[0]});
            file.delete();
        } 
catch (Exception e) {
            e.printStackTrace();
        }

    }
}

Java动态编译,以后可以整合到FS中

posted on 2009-12-07 13:23  happyli  阅读(307)  评论(0)    收藏  举报

导航