Alguém já usou ou escrito uma tarefa Ant para compilar (Rhino) JavaScript para bytecode Java?

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

  •  04-07-2019
  •  | 
  •  

Pergunta

Eu gostaria de usar o compilador Rhino JavaScript para compilar alguns JavaScript para .class bytecode arquivos para uso em um projeto. Parece que isso já deveria existir, uma vez que existem groovyc, netrexxc e tarefas jythonc para Groovy, NetREXX (!) E Jython, respectivamente. Alguém já usou ou escrito uma tarefa tão Ant, ou alguém pode fornecer algumas dicas sobre como escrever um?

O ideal seria ter alguma forma de dependências resolver entre classes JavaScript ou Java.

Foi útil?

Solução

Por que não simplesmente usar java tarefa?

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

Qualquer objeção?

Outras dicas

Eu estou usando RequireJS no meu projeto, que inclui um roteiro que traça as dependências entre os módulos, e os combina em um único arquivo JavaScript. Opcionalmente, também pode apoucar o arquivo js combinado com o compilador Google Closure. Uma vez que é nesta forma, onde todas as dependências estão incluídos em um único arquivo js, ??o arquivo pode ser facilmente compilado usando jsc.

Aqui está um segmento do meu script ant que eu uso para criar o arquivo js combinados single, compilá-lo para um arquivo de classe, e em seguida, criar um JAR executável:

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

O script de construção completa pode ser encontrada aqui .

Aqui está uma build.xml de amostra que eu uso para minhas aplicações rinoceronte. Se você tiver lotes de arquivos javascript você só precisa manter-se adicionar mais tags
~: 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top