我正在使用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()
?
答案 0 :(得分:0)
运行(Java)程序与编译它没有太大关系。要么动态加载已编译的类并运行它们(例如在新线程中),要么使用ProcessBuilder
启动新VM,基本上构建一个命令行,如“java -cp /class/path my.compiled.MainClass ...
”。后者可能是首选,因为被测试的程序不能通过System.exit()
意外终止您的程序。
当然有一个甚至更好的解决方案:为什么不以编程方式生成一些JUnit测试(并调用JUnit)?