Кто-нибудь использовал или писал задачу Ant для компиляции (Rhino) JavaScript в байт-код Java?

Я хотел бы использовать компилятор Rhino JavaScript для компиляции некоторых файлов JavaScript в файлы байт-кода .class для использования в проекте. Похоже, что это уже должно существовать, поскольку есть задачи groovyc, netrexxc и jythonc для Groovy, NetREXX (!) И Jython соответственно. Кто-нибудь использовал или писал такую ​​задачу Ant, или кто-нибудь может дать несколько советов о том, как ее написать?

В идеале у него должен быть способ разрешить зависимости между классами JavaScript или Java.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
7
0
5 101
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Почему бы просто не использовать java-задачу?

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

Есть возражения?

Хм, основная проблема - это обработка зависимостей между классами Java и JavaScript. Тем не менее, на данный момент этого может быть достаточно для работы - спасибо.

Steven Huwig 24.10.2008 05:21

Вот образец build.xml, который я использую для своих приложений rhino. Если у вас много файлов javascript, вам просто нужно добавлять больше тегов ~: 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>

~

Я использую RequireJS в своем проекте, который включает сценарий, который отслеживает зависимости между модулями и объединяет их в один файл JavaScript. При желании он также может минимизировать объединенный файл js с помощью компилятора Google Closure. Когда он находится в этой форме, где все зависимости включены в один файл js, файл можно легко скомпилировать с помощью jsc.

Вот фрагмент моего ant-скрипта, который я использую для создания единого комбинированного js-файла, компиляции его в файл класса, а затем создания исполняемого 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>

Полный сценарий сборки можно найти здесь.

Другие вопросы по теме