我尝试了下面的代码,但这是一个java代码,仅适用于.java文件。
try {
JavaCompiler jc = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager sjfm = jc.getStandardFileManager(null, null, null);
File javaFile = new File("/home/rishi/Desktop/Test.java");
Iterable fileObjects = sjfm.getJavaFileObjects(javaFile);
String[] options = new String[]{
"-d", "/home/rishi/Desktop/bin"
};
jc.getTask(null, null, null, Arrays.asList(options), null, fileObjects).call();
sjfm.close();
System.out.println("Class has been successfully compiled");
URL[] urls = new URL[]{new URL("file:///home/rishi/Desktop/")};
URLClassLoader ucl = new URLClassLoader(urls);
Class clazz = ucl.loadClass("PostProcessing");
System.out.println("Class has been successfully loaded");
Method method = clazz.getDeclaredMethod("call", null);
Object object = clazz.newInstance();
method.invoke(object, null);
} catch (Exception ex) {
ex.printStackTrace();
}
我想要Scala代码。
我也试过下面的代码,它带有.class文件,可以用Java或Scala生成。
URL[] urls = new URL[]{new URL("file:///home/rishi/Desktop/")};
URLClassLoader ucl = new URLClassLoader(urls);
Class clazz = ucl.loadClass("PostProcessing");
System.out.println("Class has been successfully loaded");
Method method = clazz.getDeclaredMethod("call", null);
Object object = clazz.newInstance();
method.invoke(object, null);
但是,我遇到了Scala生成的.class文件问题。它适用于Java .class文件。
PostProcessing.Scala:
class PostProcessing {
def call = println("Hurray !! You called me")
}
PostProcessing.java
public class PostProcessing {
public void call() {System.out.println("Hurray !! You called me");}
}
更新:
import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Arrays;
import javax.tools.JavaCompiler;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
请建议我解决方案。