14

次のコードを実行すると、OpenJDK 7 を使用しているときにengine変数が に設定されます( )。nulljava-7-openjdk-i386

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class TestRhino {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ScriptEngineManager factory = new ScriptEngineManager();
        ScriptEngine engine = factory.getEngineByName("JavaScript");
        try {
            System.out.println(engine.eval("1+1"));
        } catch (ScriptException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

java-6-openjdkおよび Oracleのjre1.7.0. 理由はありますか?

Ubuntu 11.10 を使用しています。すべての JVM は の下にインストールされ/usr/lib/jvmます。

4

2 に答える 2

3

[更新: これはバグでしたが、現在は修正されています]

要するに、これはバグかもしれません。

Rhino サポート クラス ( ) は1com.sun.script.javascript.*にコンパイルされません(ただし、これは Sun と Mozilla の間のマージの問題であることがわかりました。名前空間の問題があったことは知っていますが、それらは OpenJDK 7 ソースに存在し、makefile で参照されています) 、およびそれらは にもありません。これは、エントリとしてこれを持つ OpenJDK 6 には当てはまりません。rt.jarresources.jarMETA-INF/servicesMETA-INF/services/javax.script.ScriptEngineFactory

#script engines supported

com.sun.script.javascript.RhinoScriptEngineFactory #javascript

これはディストリビューションの決定2である可能性がありますが、書面による理由はありません。そのため、Ubuntu OpenJDK 7 ランチパッドにバグ #982501 を登録しました。私が1つを得たら、より良い答えを出します。

1このスレッドによると、

Mozilla が Suns の変更をメインライン ブランチに受け入れなかったという理由は不明ですが、それはオープンソース化される前のことでした。

また、JRE と BYOR (bring-you-own-Rhino) バージョンの競合するバージョンによって引き起こされる衝突の問題もいくつかあります (例: Ubuntu OpenJDK 7 ランチパッドのバグ #255149 )。ただし、ソースはOpenJDK 7ソースにあり、makefileに記載されており、上記のスレッドに記載されているBSDポートには同一のソースがあります。

2 この Sunバグ #6876736によると、これはディストリビューション ベースの決定です。

rhino ソースは OpenJDK の一部ではありません。それを追加するのはディストリビューション次第です。

それらが OpenJDK mercurial にチェックインされているという事実とは多少対照的ですが、Rhino は JDK 仕様に含まれていないという考えがあると思います。

于 2012-04-15T19:02:25.380 に答える
0

Rhino サービスを登録する必要がありますが、正確な方法はわかりませんが、META-INF 内にファイルを作成することです。

または、スクリプト API をスキップして直接使用することもできます。

この基本的な例を確認してください。

https://github.com/mozilla/rhino/blob/master/examples/Control.java

于 2013-11-07T04:31:09.837 に答える