我使用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()这样的东西
发布于 2012-07-20 19:07:14
运行(Java)程序与编译它没有太多关系。要么动态加载编译的类并运行它们(例如,在新线程中),要么使用ProcessBuilder启动一个新的VM,基本上构造一个类似"java -cp /class/path my.compiled.MainClass ...“的命令行。后者可能更好,因为被测程序不会意外地通过System.exit()终止您的程序。
当然,还有一个更好的解决方案:为什么不以编程方式生成一些JUnit测试(并调用JUnit)?
https://stackoverflow.com/questions/11577220
复制相似问题