Java tutorial
import java.lang.reflect.Method; import java.net.URI; import java.util.Iterator; import java.util.NoSuchElementException; import javax.tools.JavaCompiler; import javax.tools.JavaFileObject; import javax.tools.SimpleJavaFileObject; import javax.tools.ToolProvider; public class Main { public static void main(String[] args) throws Exception { JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); String program = "class Test{" + " public static void main (String [] args){" + " System.out.println (\"Hello, World\");" + " System.out.println (args.length);" + " }" + "}"; Iterable<? extends JavaFileObject> fileObjects; fileObjects = getJavaSourceFromString(program); compiler.getTask(null, null, null, null, null, fileObjects).call(); Class<?> clazz = Class.forName("Test"); Method m = clazz.getMethod("main", new Class[] { String[].class }); Object[] _args = new Object[] { new String[0] }; m.invoke(null, _args); } static Iterable<JavaSourceFromString> getJavaSourceFromString(String code) { final JavaSourceFromString jsfs = new JavaSourceFromString("code", code); return new Iterable<JavaSourceFromString>() { public Iterator<JavaSourceFromString> iterator() { return new Iterator<JavaSourceFromString>() { boolean isNext = true; public boolean hasNext() { return isNext; } public JavaSourceFromString next() { if (!isNext) throw new NoSuchElementException(); isNext = false; return jsfs; } public void remove() { throw new UnsupportedOperationException(); } }; } }; } } class JavaSourceFromString extends SimpleJavaFileObject { final String code; JavaSourceFromString(String name, String code) { super(URI.create("string:///" + name.replace('.', '/') + Kind.SOURCE.extension), Kind.SOURCE); this.code = code; } public CharSequence getCharContent(boolean ignoreEncodingErrors) { return code; } }