इसलिए मैंने हाल ही में जेडीके 1.6 में उपलब्ध नए JavaCompiler API के बारे में सीखा। यह बहुत ही सरल चल कोड से सीधे एक String
एक .class
करने के लिए फ़ाइल को संकलित करने के लिए बनाता है:जेडीके 1.6 से JavaCompiler 1.6: बाइट [] सरणी के लिए सीधे क्लास बाइट्स कैसे लिखें?
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, null, null, null, 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[]
सरणी के लिए सीधे संकलित करने के लिए यह संभव है, और File
के साथ काम कर आई/ओ पूरी तरह से messiness से बचने के?