JavaCompiler接口:在运行时传入变量

时间:2012-07-20 10:07:38

标签: java compiler-construction

我正在使用java提供的接口来调用程序中的编译器。

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);

Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjectsFromStrings(Arrays.asList("MyClass.java"));

compiler.getTask(null, fileManager, null, null, null, compilationUnits).call();

fileManager.close();

一切正常,但我想要做的是将变量传递给我正在编译的项目,并比较结果,看看它们是否是预期的,所以我没有程序正常工作。有点像JUnit如何测试类。 JavaCompiler接口中是否有方法允许您传入变量并读取它们......类似System.in()System.out()

1 个答案:

答案 0 :(得分:0)

运行(Java)程序与编译它没有太大关系。要么动态加载已编译的类并运行它们(例如在新线程中),要么使用ProcessBuilder启动新VM,基本上构建一个命令行,如“java -cp /class/path my.compiled.MainClass ...”。后者可能是首选,因为被测试的程序不能通过System.exit()意外终止您的程序。

当然有一个甚至更好的解决方案:为什么不以编程方式生成一些JUnit测试(并调用JUnit)?