2012-04-07 8 views
13

में अशक्त रिटर्न जब मैं कोड का निम्न भाग चलाने के लिए, engine चर null पर सेट किया जाता है जब मैं OpenJDK 7 (java-7-openjdk-i386) का उपयोग कर रहा हूँ।राइनो, getEngineByName ("JavaScript") का उपयोग करने की कोशिश कर रहा OpenJDK 7

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। कोई विचार क्यों?

मैं उबंटू 11.10 का उपयोग कर रहा हूं। सभी JVMs /usr/lib/jvm के अंतर्गत स्थापित हैं।

+0

भी देखें [जावास्क्रिप्ट इंजन नहीं पाया जा सकता है] (http://stackoverflow.com/questions/6089773); जेडीके प्रदाता चुन सकते हैं कि कौन सा स्क्रिप्ट इंजन पैकेज करना है, यदि कोई हो। – McDowell

+0

दिलचस्प, jdk 7 मेरे लिए डेबियन पर एक ही समस्या है। jdk6 का jrunsript जावास्क्रिप्ट इंजन चलाता है और jdk 7 jrunsript प्रिंट करता है "भाषा जेएस के लिए इंजन नहीं मिला"। – josefx

+0

नोट: आप निश्चित नहीं हो सकते कि एक दिया गया स्क्रिप्ट इंजन उपलब्ध है। अगर आपको इसकी ज़रूरत है, तो इसे अपने साथ लाएं। –

उत्तर

3

[अपडेट: यह एक बग, जो है अब been fixed था]

संक्षेप में, यह एक बग हो सकता है।

राइनो समर्थन वर्गों (com.sun.script.javascript.*) rt.jar में संकलित कर रहे हैं नहीं है (हालांकि मैं इस सूर्य और मोज़िला के बीच विलय मुद्दा होने के संदर्भ मिले, और मुझे पता है कि नाम स्थान मुद्दों किया गया है, वे OpenJDK 7 में मौजूद नहीं है स्रोत और मेकफ़ाइल में संदर्भित हैं), और वे resources.jar के META-INF/services से भी अनुपलब्ध हैं।

#script engines supported 

com.sun.script.javascript.RhinoScriptEngineFactory #javascript 

हालांकि इस एक distro निर्णय इसके लिए कोई लिखित कारण है हो सकता है, तो मैं एक bug #982501 in the Ubuntu OpenJDK 7 launchpad दायर: यह जो एक META-INF/services/javax.script.ScriptEngineFactory प्रविष्टि के रूप में यह है OpenJDK 6, के साथ ऐसा नहीं है। एक बार मुझे एक बार बेहतर जवाब मिलेगा।

this thread के अनुसार 1,

मैंने कहीं सुना था कि मोज़िला अज्ञात कारणों के लिए उनके मुख्य लाइन शाखा में सूर्यों परिवर्तन को स्वीकार नहीं किया लेकिन कहा कि opensourced जाने से पहले किया गया था।

वहाँ भी कुछ टक्कर JRE के संस्करणों और एक BYOR (लाने में आप खुद-राइनो) का संस्करण (उदा bug #255149 on Ubuntu OpenJDK 7 launchpad) परस्पर विरोधी की वजह से मुद्दों की गई है। हालांकि, स्रोत ओपनजेडीके 7 source में है और makefile में उल्लिखित है, और उपर्युक्त थ्रेड में उल्लिखित बीएसडी पोर्ट में sources समान है।

2 इस सूर्य bug #6876736 के अनुसार, इस एक distro आधारित निर्णय करने के लिए है:

राइनो स्रोतों, OpenJDK का हिस्सा नहीं हैं यह इसे जोड़ने के लिए distros पर निर्भर है।

कुछ हद तक इस तथ्य के विपरीत कि वे OpenJDK Mercurial में चेक इन हैं, लेकिन मुझे लगता है कि विचार यह है कि राइनो जेडीके स्पेक में नहीं है।

+1

7 ~ u3-2.1.1 ~ pre1-1ubuntu2 में फिक्स्ड – Yuval

0

आप राइनो सेवा रजिस्टर करना होगा, लेकिन मैं नहीं जानता कि वास्तव में कैसे, अंदर META-INF

एक फ़ाइल बनाने के द्वारा है या आप स्क्रिप्ट API छोड़ सकते हैं और इसे सीधे उपयोग कर सकते हैं।

चेक इस बुनियादी उदाहरण:

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

संबंधित मुद्दे