Муравей запускает файл с битой и идет вперед - PullRequest
2 голосов
/ 14 апреля 2011

Я застрял с глупой проблемой. Проблема:

Мне нужно запустить собственный самодельный сервер. Этот сервер запущен с использованием файла .bat (я работаю в ОС Windows).

Я написал Ant target:

  1. <exec /> start-stupid-server.bat
  2. <waitfor /> порт сервера.

Итак, файл bat запущен, сервер прослушивает порт. Муравей пишет BUILD SUCCESSFUL и не выходит. Муравей ждет, пока окно сервера не закроется. Я перепробовал 100 500 способов преодолеть это, но мне это не удалось. Есть ли в Ant путь к файлу <exec /> bat и забыть об этом?

<exec spawn="true" /> не помогает, потому что Ant закрывает окно сервера и сервер выключается.

Я пробовал <exec /> с:

start start-stupid-server.bat,
start /b start-stupid-server.bat

Ничего не помогает :( Ant все еще ждет, пока окно сервера не закроется.

Вот моя цель:

<target name="start_proprietary_server" depends="bootstrap">
    <echo message="going to stop MDM server instance... "/>
    <forget daemon="true">
        <exec executable="${app.custom.root}/bin/stopAll.bat" dir="${app.custom.root}/bin"  />
    </forget>
    <waitfor
            maxwait="20" maxwaitunit="second"
            checkevery="1" checkeveryunit="second" timeoutproperty="mdm.stop.error">
        <and>
            <not> <socket server="localhost" port="12000" /> </not>
            <not> <socket server="localhost" port="14444" /> </not>
        </and>
    </waitfor>

    <if>
        <isset property="mdm.stop.error" />
        <then>
            <echo message="There are some problems while stopping MDM server. See what's went wrong" />
        </then>
        <else>
            <echo message="MDM server successfully stoped." />
        </else>
    </if>

    <echo message="going to start MDM server instance... "/>

    <!--
        Starts but doesn't exit target
        <exec executable="cmd" dir="${app.custom.root}/bin" >
            <arg value="/c start startAll.bat" />
        </exec>
    -->

    <!--
        <forget daemon="true">
            <exec executable="cmd" dir="" >
                <arg value="/c startAll.bat" />
            </exec>
        </forget>
    -->

    <forget daemon="true">
        <exec executable="${app.custom.root}/bin/startAll.bat" dir="${app.custom.root}/bin"  />
    </forget>


    <echo message="Wating for localhost ports #12000 and #14444"/>
    <waitfor
            maxwait="40" maxwaitunit="second"
            checkevery="3" checkeveryunit="second" timeoutproperty="mdm.start.error">
        <and>
            <socket server="localhost" port="12000" />
            <socket server="localhost" port="14444" />
        </and>
    </waitfor>

    <if>
        <isset property="mdm.start.error" />
        <then>
            <echo message="There are some problems while starting MDM server. See what's went wrong" />
        </then>
        <else>
            <echo message="MDM server has been started." />
        </else>
    </if>
</target>

Вот файл летучей мыши:

call .\bcmenv.bat
start /min .\startLocator.bat
sleep 5

start /min .\startServices.bat
exit

Я пытался выполнить его, используя тег forget, используя start, start /b и call, но ничего не помогает. Ant не завершает задачу, пока окно сервера не закроется.

Если я использую spawn без forget, Ant закрывает окно сервера при выходе из цели. Он использует spawn в сочетании с забудьте, цель Ant не завершена, пока окно сервера не закроется.

Что я могу попробовать дальше?

1 Ответ

0 голосов
/ 14 апреля 2011

Вы можете создать другой пакетный файл, который запускает сервер и сразу же возвращается, используя команду start:

start <path_to_server_bat> <args>

Вы пробовали spawn=true?

...