2008-10-23 7 views
7

Me gustaría utilizar el compilador Rhino JavaScript para compilar algunos JavaScript en .class bytecode para usar en un proyecto. Parece que esto ya debería existir, ya que hay tareas groovyc, netrexxc y jythonc para Groovy, NetREXX (!) Y Jython, respectivamente. ¿Alguien ha usado o escrito una tarea Ant, o alguien puede proporcionarle algunos consejos sobre cómo escribirla?¿Alguien ha usado o escrito una tarea Ant para compilar (Rhino) código de JavaScript a Java?

Lo ideal sería que tuviera alguna forma de resolver las dependencias entre las clases de JavaScript o Java.

Respuesta

5

¿Por qué no utilizar simplemente la tarea Java?

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

¿Alguna objeción?

+0

Hmm, la principal preocupación es manejar las dependencias entre las clases de Java y JavaScript. Aún así, esto podría ser suficiente para trabajar por ahora, gracias. –

5

Aquí hay un ejemplo build.xml que uso para mis aplicaciones de rinoceronte. Si usted tiene un montón de archivos javascript sólo tiene que seguir añadiendo más etiquetas
~: Hormiga frasco de compilación de ejecución

<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

estoy usando RequireJS en mi proyecto, que incluye un script que traza fuera de las dependencias entre los módulos, y los combina en un solo archivo de JavaScript. Opcionalmente, también puede minimizar el archivo combinado js con el compilador Google Closure. Una vez que está en esta forma, donde todas las dependencias están incluidas en un solo archivo js, ​​el archivo se puede compilar fácilmente usando jsc.

Aquí hay un segmento de mi guión de hormigas que utilizo para crear el archivo js combinada única, compilar en un archivo de clase, y luego crear un ejecutable JAR:

<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> 

La escritura de la estructura completa se puede encontrar here.

Cuestiones relacionadas