¿Alguien ha usado o escrito una tarea Ant para compilar (Rhino) JavaScript en código de bytes Java?

StackOverflow https://stackoverflow.com/questions/231550

  •  04-07-2019
  •  | 
  •  

Pregunta

Me gustaría usar el compilador Rhino JavaScript para compilar algunos JavaScript para .class archivos de código de bytes 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 de Ant, o alguien puede proporcionar algunos consejos sobre cómo escribir una?

Idealmente, tendría alguna forma de resolver las dependencias entre las clases de JavaScript o Java.

¿Fue útil?

Solución

¿Por qué no simplemente usar 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?

Otros consejos

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

Aquí hay un segmento de mi script ant que utilizo para crear el único archivo js combinado, compilarlo en un archivo de clase y luego crear un JAR ejecutable:

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

El script de compilación completo se puede encontrar aquí .

Aquí hay un ejemplo de build.xml que uso para mis aplicaciones de Rhino. Si tiene muchos archivos javascript, solo necesita seguir agregando más etiquetas
~: Ant compile jar run

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

~

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top