JavaCompiler接口:运行时传入变量

问题描述 投票:0回答:1

我正在使用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()

java java-compiler-api
1个回答
0
投票

运行(Java)程序与编译它没有太大关系。要么动态加载已编译的类并运行它们(例如在新线程中),要么使用

ProcessBuilder
启动新的 VM,基本上构建一个像“
java -cp /class/path my.compiled.MainClass ...
”这样的命令行。后者可能是首选,因为被测试的程序不会通过
System.exit()
意外终止您的程序。

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

© www.soinside.com 2019 - 2024. All rights reserved.