4

我正在使用 Rhino 编写 Eclipse (RCP) 应用程序的脚本。问题是,从 Javascript 我只能访问提供 Rhino 的插件可用的类,而不是运行脚本的插件可用的所有类。

显而易见的答案是将 Rhino 放在脚本插件中,但这不起作用,因为它已经由应用程序自己的插件之一提供(它也提供了我需要编写脚本的东西)并且 Eclipse 总是使用这个版本而不是版本近在咫尺。

  • 有没有办法改变 Rhino 使用的类加载器
  • 或者是否可以确保 Eclipse 从一个插件而不是另一个插件加载 Rhino 类?

感谢 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()    
            ) ;

        //[...]
    }
4

2 回答 2

4

有没有办法改变 Rhino 使用的类加载器

Rhino 应该使用当前线程的 ContextClassLoader。试试Thread.setContextClassLoader(别忘了恢复它)。

如果这不起作用,也许您可​​以创建自己的 Rhino ContextFactory

public final void initApplicationClassLoader(java.lang.ClassLoader loader)

设置搜索 Java 类时使用的显式类加载器。

于 2010-02-08T09:52:26.010 回答
0

我不知道 Rhino 的细节,但您可以考虑使用带有“注册”策略的 Eclipse“伙伴类加载”。

Rhino 的插件(net.weissmann.tom.rhino例如)会通过Eclipse-BuddyPolicy: registered在其MANIFEST.MF. 具有 Rhino 应该能够看到的类的插件将指定Eclipse-RegisterBuddy: net.weissmann.tom.rhino并且需要对net.weissmann.tom.rhino.

于 2011-07-11T13:24:00.167 回答