我正在使用 Rhino 编写 Eclipse (RCP) 应用程序的脚本。问题是,从 Javascript 中,我只能访问提供 Rhino 的插件可用的类,而不能访问运行脚本的插件可用的所有类。
显而易见的答案是将 Rhino 放在脚本插件中,但这不起作用,因为它已经由应用程序自己的插件之一提供(它也提供了我需要编写脚本的东西)并且 Eclipse 总是使用这个版本而不是版本更接近手。
感谢 Thilo 的回答,我使用了这个:
import net.weissmann.tom.rhino.Activator; // Plugin activator class
import org.mozilla.javascript.tools.shell.Main;
public class JSServer extends Thread {
//[...]
public void run() {
// recent versions of the Main class kindly export
// the context factory
Main.shellContextFactory.initApplicationClassLoader(
Activator.class.getClassLoader()
) ;
//[...]
}
最佳答案
Is there a way to change the classloader used by Rhino
Rhino 应该使用当前线程的 ContextClassLoader。试试 Thread.setContextClassLoader (不要忘记恢复它)。
如果这不起作用,也许你可以 create your own Rhino ContextFactory :
public final void initApplicationClassLoader(java.lang.ClassLoader loader)
Set explicit class loader to use when searching for Java classes.
关于eclipse-plugin - 使用 Rhino : classloader belongs to the plugin providing Rhino, 编写 Eclipse 脚本,而不是使用它的插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2220604/