2008-10-23 9 views
7

Ich möchte den Rhino JavaScript Compiler verwenden, um einige JavaScript zu .class Bytecode-Dateien für die Verwendung in einem Projekt zu kompilieren. Es scheint, als ob dies bereits existieren sollte, da groovyc, netrexxc und jythonc für Groovy, NetREXX (!) Und Jython existieren. Hat jemand solch eine Ant-Aufgabe benutzt oder geschrieben oder kann jemand Tipps geben, wie man eine schreibt?Hat jemand eine Ant-Aufgabe verwendet oder geschrieben, um (Rhino) JavaScript zu Java-Bytecode zu kompilieren?

Idealerweise hätte es eine Möglichkeit, Abhängigkeiten zwischen JavaScript- oder Java-Klassen aufzulösen.

Antwort

5

Warum nicht einfach Java-Task verwenden?

<java fork="yes" 
    classpathref="build.path" 
    classname="org.mozilla.javascript.tools.jsc.Main" 
    failonerror="true"> 
    <arg value="-debug"/> 
     ... 
    <arg value="file.js"/>   
</java> 

Einwände?

+0

Hmm, das Hauptproblem ist die Handhabung von Abhängigkeiten zwischen Java und JavaScript-Klassen. Trotzdem könnte das jetzt ausreichen, danke. –

5

Hier ist ein Beispiel build.xml für meine Rhino-Anwendungen. Wenn Sie viele JavaScript-Dateien haben müssen Sie nur weitere Tags halten Zugabe
~: ant Kompilierung jar laufen

<project> 
<target name="compile"> 
    <mkdir dir="build/classes"/> 
    <java fork="yes" 
     classpath="js.jar" 
     classname="org.mozilla.javascript.tools.jsc.Main" 
     failonerror="true"> 
     <arg value="-nosource"/> 
     <arg value="-opt"/> 
     <arg value="9"/> 
     <arg value="-version"/> 
     <arg value="170"/> 
     <arg value="src/SwingApplication.js"/> 
    </java> 
    <move todir="build/classes"> 
     <fileset dir="src"> 
      <include name="**/*.class"/> 
     </fileset> 
    </move> 
</target> 
<target name="jar"> 
    <mkdir dir="build/jar"/> 
    <jar destfile="build/jar/SwingApplication.jar" basedir="build/classes"> 
     <zipfileset src="js.jar" includes="**/*.class"/> 
     <manifest> 
      <attribute name="Main-Class" value="SwingApplication"/> 
     </manifest> 
    </jar> 
</target> 
<target name="run"> 
    <exec executable="java"> 
     <arg valUe="-jar"/> 
     <arg value="build/jar/SwingApplication.jar"/> 
    </exec> 
</target> 
</project> 

~

6

ich RequireJS in meinem Projekt bin mit, die ein Skript enthält, die Spuren out Abhängigkeiten zwischen Modulen und kombiniert sie in einer einzigen JavaScript-Datei. Optional kann die kombinierte js-Datei auch mit dem Google Closure-Compiler minimiert werden. Sobald es in dieser Form ist, wo alle Abhängigkeiten in einer einzigen js-Datei enthalten sind, kann die Datei leicht mit jsc kompiliert werden.

Hier ist ein Teil meines Ant-Skript, das ich die einzige kombinierte js-Datei erstellen verwenden, kompilieren es zu einer Klassendatei, und dann eine ausführbare JAR erstellen:

<target name="compile-single-js"> 
    <mkdir dir="${build-js}"/> 

    <java classname="org.mozilla.javascript.tools.shell.Main"> 
     <classpath> 
      <path refid="rhino-classpath"/> 
      <path refid="closure-classpath"/> 
     </classpath> 
     <arg value="${js-build-script}"/> 
     <arg value="${js-build-dir}"/> 
     <arg value="name=${build-js-main-rhino-frontend-module}"/> 
     <arg value="out=${build-js-main}"/> 
     <arg value="baseUrl=."/> 
     <arg value="includeRequire=true"/> 
     <arg value="inlineText=true"/> 
     <arg value="optimize=none"/> 
    </java> 
</target> 

<target name="compile-single-class" depends="compile-single-js"> 
    <mkdir dir="${build-class}"/> 

    <!-- TODO: set -opt --> 
    <java classname="org.mozilla.javascript.tools.jsc.Main"> 
     <classpath> 
      <path refid="rhino-classpath"/> 
     </classpath> 
     <arg value="-o"/> 
     <arg value="${build-class-main-name}.class"/> 
     <arg value="${build-js-main}"/> 
    </java> 
    <move file="${build-js}/${build-class-main-name}.class" todir="${build-class}"/> 
</target> 

<target name="jar-single-class" depends="compile-single-class"> 
    <mkdir dir="${build-jar}"/> 

    <jar destfile="${build-jar-main}" 
     basedir="${build-class}" 
     includes="${build-class-main-name}.class"> 
     <manifest> 
      <attribute name="Main-Class" value="${build-class-main-name}" /> 
     </manifest> 
    </jar> 
</target> 

Der komplette Build-Skript gefunden werden kann here.