如何从Scala应用程序重新加载和调用外部scala文件的方法

时间:2016-05-05 13:04:07

标签: java scala compilation runtime external

我尝试了下面的代码,但这是一个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;

请建议我解决方案。

0 个答案:

没有答案