4

Rhino を使用して Eclipse (RCP) アプリケーションのスクリプトを作成しています。問題は、Javascript からは、スクリプトを実行するプラグインで使用できるすべてのクラスではなく、Rhino を提供するプラグインで使用できるクラスにしかアクセスできないことです。

明らかな答えは、Rhino をスクリプト プラグインに入れることですが、Rhino はアプリケーション独自のプラグインの 1 つによって既に提供されており (スクリプトに必要なものも提供します)、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 ローダー)

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 に答える