Интеграция grunt с ant - программирование

Интеграция grunt с ant

Есть ли хорошие учебники по интеграции grunt с ant? Наша текущая сборка использует ant, потому что мы являемся магазином Java. Тем не менее, front-end начинает становиться гражданином первого класса, и мы изучаем с помощью node и хрюкаем для сборки front-end. Мне нужно интегрировать сборку front-end с помощью сборки ant. Мне нужно знать, как нормализовать коды выхода для всех моих пользовательских задач, а также встроенные задачи grunt и ограничить вывод консоли этими предопределенными кодами, когда вызовы grunt вызывают ant. Любая помощь будет принята с благодарностью.

4b9b3361

Ответ 1

Вы можете использовать этот макрос:

<macrodef name="exec-node">
    <attribute name="module" description="The name of the NodeJS module to execute"/>
    <attribute name="failonerror" default="true" description="Fail if the exit code is not 0"/>
    <element name="args" implicit="yes" description="Argument to pass to the exec task"/>
    <sequential>
        <exec executable="cmd.exe" failonerror="@{failonerror}" osfamily="winnt">
            <arg line="/c  @{module}" />
            <args/>

            <!-- Windows cmd output workaround: http://stackoverflow.com/a/10359327/227349 -->
            <!-- Forces node stderror and stdout to a temporary file -->
            <arg line=" &gt; _tempfile.out 2&lt;&amp;1"/>

            <!-- If command exits with an error, then output the temporary file        -->
            <!-- to stdout delete the temporary file and finally exit with error level 1  -->
            <!-- so that the apply task can catch the error if @failonerror="true"        -->
            <arg line=" || (type _tempfile.out &amp; del _tempfile.out &amp; exit /b 1)"/>

            <!-- Otherwise, just type the temporary file and delete it-->
            <arg line=" &amp; type _tempfile.out &amp; del _tempfile.out &amp;"/>
        </exec>
        <exec executable="@{module}" failonerror="@{failonerror}" osfamily="unix">
            <args/>
        </exec>
    </sequential>
</macrodef>

И вы можете вызвать любую команду: example:

<target name="jshint">
    <exec-node module="grunt">
        <arg value="jshint" />
    </exec-node>
</target>

работает как шарм: также обеспечивает печать stderr, что является обычной проблемой при вызове grunt.

Ответ 2

Grunt может вызывать командную строку, поэтому вы можете легко создать несколько задач в grunt, которые ничего не делают, кроме выполнения задачи ant через оболочку.

Библиотека grunt-shell позволяет особенно легко выполнять внешние команды из задачи grunt: https://github.com/sindresorhus/grunt-shell

Так как вы говорите о пользовательских кодах выхода, вам, вероятно, придется написать свою собственную задачу командной строки, которая выполняет команду оболочки, а затем просматривает код ответа (возможно, с помощью помощника grunt.helpers.spawn),: https://github.com/gruntjs/grunt/blob/master/docs/api_utils.md#gruntutilsspawn

Мой совет? Моя организация недавно прошла то же самое, и лучше всего просто сделать чистый перерыв с ant и полностью избавиться от нее Проекты, связанные с JavaScript.

У Grunt есть такая растущая и полезная библиотека плагинов, я был бы удивлен, если бы вы не смогли дублировать ваши файлы сборки ant и создать 100% -ное решение для javascript.

Ответ 3

вы можете использовать http://abc.tools.qafoo.com/, который включает модуль npm * 1)

Единственное, что вам тогда нужно, это настраиваемый объект, например:

…

<target
    name="-mm:compile:main~hooked"
   extensionOf="-compile:main~hook"
    depends="
        -my-compile-npm-hook
    " 
>

<target
    name="-my-compile-npm-hook"
>
    <echo>install local grunt-cli</echo>
    <antcall target="npm:install">
        <param name="in.npm.package.name" value="grunt-cli" />
    </antcall>
</target>

…

после этого вы можете запустить grunt в псевдониме каталога .npm/node_modules/.bin/ ${npm.local.modulesdir}/.bin/ ^^ не пропустите, чтобы включить или определить свойства из src/main/resources/extensions/npm/npm.properties

* 1): неудачно багги с текущей версией node.js