2014-03-19 7 views
22

Ich probiere Java 8 in meinem Projekt aus und stehe in einem Fehler, der mit meinem Build-Prozess zusammenhängt.Java 8 Javascript Engine Abwärtskompatibilität

Ich benutze ANT-Skripte und irgendwann benutze ich Javascript (eingebettet in ANT), um einige Build-spezifische Operationen durchzuführen. Der Teil des Skripts, das den Fehler verursacht sieht aus wie folgt:

<script language="javascript"> 

     <![CDATA[ 

     importClass(java.io.File); 
     importClass(java.io.FileReader); 
        ... 
        ]]> 
</script> 

Das Projekt baut gut mit Java 7 oder Java 6, aber es gibt mir einige Fehler, wenn ich mit Java am 8. Diese Fehler sind verwandte zum Upgrade der JS-Engine.

Insbesondere ich erhalte die folgende Ausnahme:

javax.script.ScriptException: Reference: „importClass“ definiert in an der Linie ist nicht

Nach einigen googeln fand ich heraus, dass es die in Beziehung steht in der JDK unter Ausgabe

[#JDK-8025132]

ich habe versucht, was in den Kommentaren vorgeschlagen, aber ohne Glück.

Wie kann ich die Java 8 Nashorn Engine so konfigurieren, dass sie mit der Rhino JS Engine kompatibel ist?

+0

Bezogen auf http://stackoverflow.com/questions/22502630/switching-from-rhino-to-nashorn – Philipp

Antwort

39

Ein Ansatz ist

load("nashorn:mozilla_compat.js"); 

die importClass liefert aufzunehmen.

Auf der anderen Seite können Sie java.io.File, java.io.FileReader, ... direkt ohne Importieren verwenden.

var File = java.io.File; 
var FileReader = java.io.FileReader; 

Dies ist abwärtskompatibel mit Rhino.

+3

Nach diesem Post: (https://bugs.openjdk.java.net/browse/JDK-8025132 ? focusedCommentId = 13569345 & page = com.atlassian.jira.plugin.system.issuetabpanels: Kommentar-Tab-Panel # comment-13569345) Sie können die Ladeanweisung in einen Try Catch-Block setzen. Das hat den Trick für mich Versuch { laden ("nashorn: mozilla_compat.js"); } catch (e) { // ignoriere die Ausnahme - vielleicht laufen wir auf Rhino! } – Steven