0

我正在使用 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()and System.out()

4

1 回答 1

0

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

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

于 2012-07-20T11:07:13.967 回答