我试图让我的 Main 类在其控制台(eclipse)中打印出来自 Example1 类的输出(在资源/作为 .java 文件中),这取决于 Example2 类。我有这个想法是出于评分目的 - 在 javafx 应用程序中实现它,该应用程序在使用 FileChooser 找到的编译类文件上运行测试类(Example1)。我发现了有关使用 JavaCompiler 的信息,但我不知道如何使用它来编译依赖于 .class 文件的 .java 文件并执行它...
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.tools.DiagnosticCollector;
import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
public class Main {
private static final String EXAMPLE1 = "resources/Example1.java";
private static final String EXAMPLE2 = "resources/Example2.class";
public static void main(String[] args) {
JavaCompiler jc = ToolProvider.getSystemJavaCompiler();
DiagnosticCollector<JavaFileObject> d = new DiagnosticCollector<>();
StandardJavaFileManager fm = jc.getStandardFileManager(d, null, null);
List<String> tag = new ArrayList<>();
tag.add("-classpath");
tag.add(System.getProperty("java.class.path") + File.pathSeparator + EXAMPLE2);
File file = new File(EXAMPLE1);
Iterable<? extends JavaFileObject> cu = fm.getJavaFileObjectsFromFiles(Arrays.asList(file));
JavaCompiler.CompilationTask task = jc.getTask(null, fm, null, tag, null, cu);
/*
* ?
*/
}
}
Example1 作为 .java 文件在resources/Example1.java
.
public class Example1 {
public static void main(String[] args) {
Example2 ex2 = new Example2(1, 2);
System.out.println("x : " + ex2.x + ", y : " + ex2.y);
System.out.println("sum : " + ex2.sum());
System.out.println("mult : " + ex2.mult());
}
}
Example2 作为 .class 文件resources/Example2.class
public class Example2 {
int x;
int y;
Example2(int x, int y) {
this.x = x;
this.y = y;
}
public int sum() {
return x + y;
}
public int mult() {
return x * y;
}
}