所以我最近了解到JDK 1.6中提供的新
JavaCompiler API.这使得直接从运行代码将String编译为.class文件变得非常简单:
String className = "Foo"; String sourceCode = "..."; JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); List<JavaSourceFromString> unitsToCompile = new ArrayList<JavaSourceFromString>() {{ add(new JavaSourceFromString(className,sourceCode)); }}; StandardJavaFileManager fileManager = compiler.getStandardFileManager(null,null,null); compiler.getTask(null,fileManager,unitsToCompile).call(); fileManager.close(); ByteArrayOutputStream bos = new ByteArrayOutputStream(); FileInputStream fis = new FileInputStream(className + ".class"); IoUtils.copyStream(fis,bos); return bos.toByteArray();
您可以从Javadoc获取JavaSourceFromString的源代码.
这将非常方便地将sourceCode编译为当前工作目录中的Foo.class.
我的问题是:是否可以直接编译到byte []数组,并避免完全处理文件I / O的混乱?