Qualcuno ha usato o scritto un'attività Ant per compilare (by Rhino) JavaScript in bytecode Java?

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

  •  04-07-2019
  •  | 
  •  

Domanda

Vorrei usare il compilatore Rhino JavaScript per compilare JavaScript in .class file bytecode da utilizzare in un progetto. Sembra che questo dovrebbe già esistere, dal momento che ci sono attività groovyc, netrexxc e jythonc rispettivamente per Groovy, NetREXX (!) E Jython. Qualcuno ha usato o scritto un'attività così formica o qualcuno può fornire alcuni suggerimenti su come scriverne uno?

Idealmente avrebbe un modo per risolvere le dipendenze tra le classi JavaScript o Java.

È stato utile?

Soluzione

Perché non usare semplicemente l'attività java?

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

Eventuali obiezioni?

Altri suggerimenti

Sto usando RequireJS nel mio progetto, che include uno script che traccia le dipendenze tra i moduli e le combina in un singolo file JavaScript. Facoltativamente, può anche minimizzare il file js combinato con il compilatore di Google Closure. Una volta che è in questa forma, in cui tutte le dipendenze sono incluse in un singolo file js, il file può essere facilmente compilato usando jsc.

Ecco un segmento del mio script ant che uso per creare il singolo file js combinato, compilarlo in un file di classe e quindi creare un JAR eseguibile:

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

Lo script di compilazione completo è disponibile qui .

Ecco un esempio di build.xml che utilizzo per le mie applicazioni di Rhino. Se hai molti file javascript devi solo continuare ad aggiungere altri tag
~: form compilazione jar jar

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

~

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top