Mar*_*ayi 5 java scripting mozilla rhino jdk1.6
我想导入一个我已经在外部文件夹中编写的类,例如:我的类Example.java位于c:\class\Example.java我的脚本中,就像使用一样
var importedClass = new JavaImporter("c:\\class\\Example.java");
Run Code Online (Sandbox Code Playgroud)
要么
importClass("c:\\class\\Example.java");
Run Code Online (Sandbox Code Playgroud)
这是在ScriptEngine rhino的脚本
中我该怎么做?
我明白你想:
该javax.tools包提供了编译代码的机制,但如果你不是在JDK中运行,ToolProvider.getSystemJavaCompiler()将返回null,你就必须依靠其他一些编译机制(调用外部编译器;嵌入Eclipse编译器;等等).
Java字节码(.class二进制文件)可以在运行时通过ClassLoader加载.
为了使加载的类对脚本引擎可见,您需要通过ScriptEngineManager(ClassLoader)构造函数提供它们.
编辑:根据要求
public class HelloWorld {
public void say() {
System.out.println("Hello, World!");
}
}
Run Code Online (Sandbox Code Playgroud)
该脚本只调用Java反射API HelloWorld.class从C:\foo\bin目录中加载和实例化一个类:
function classImport() {
var location = new java.net.URL('file:/C:/foo/bin/');
var urlArray = java.lang.reflect.Array.newInstance(java.net.URL, 1);
urlArray[0] = location;
var classLoader = new java.net.URLClassLoader(urlArray);
return classLoader.loadClass("HelloWorld");
}
var myClass = classImport();
for(var i=0; i<10; i++) {
myClass.getConstructor(null).newInstance(null).say();
}
Run Code Online (Sandbox Code Playgroud)
我敢肯定,还有更优雅的方式.