Quelqu'un a-t-il déjà utilisé ou écrit une tâche Ant pour compiler du code JavaScript (Rhino) en bytecode Java?

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

  •  04-07-2019
  •  | 
  •  

Question

J'aimerais utiliser le compilateur Rhino JavaScript pour compiler du code JavaScript dans .class. les fichiers de code temporel à utiliser dans un projet. Il semble que cela devrait déjà exister, car il existe des tâches groovyc, netrexxc et jythonc pour Groovy, NetREXX (!) Et Jython, respectivement. Quelqu'un a-t-il déjà utilisé ou écrit une telle tâche Ant ou quelqu'un peut-il fournir des conseils sur la manière de l'écrire?

Idéalement, il serait possible de résoudre les dépendances entre les classes JavaScript ou Java.

Était-ce utile?

La solution

Pourquoi ne pas simplement utiliser la tâche Java?

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

Des objections?

Autres conseils

J'utilise RequireJS dans mon projet, qui inclut un script qui trace les dépendances entre les modules et les combine. en un seul fichier JavaScript. En option, il peut également réduire le fichier js combiné avec le compilateur Google Closure. Une fois sous cette forme, où toutes les dépendances sont incluses dans un seul fichier js, le fichier peut être facilement compilé à l'aide de jsc.

Voici un segment de mon script ant que j'utilise pour créer le fichier js unique combiné, le compiler dans un fichier de classe, puis créer un fichier JAR exécutable:

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

Le script de construction complet est disponible ici .

Voici un exemple de build.xml que j'utilise pour mes applications rhino. Si vous avez beaucoup de fichiers javascript, il vous suffit de continuer à ajouter d'autres balises
~: 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>

~

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top