我遇到了一个愚蠢的问题。问题是:
我需要启动专有的自制服务器。此服务器使用.bat文件启动(我在Windows操作系统上)。
我写了一个Ant目标:
<exec /> start-stupid-server.bat
<waitfor />
服务器端口。因此执行bat文件,服务器侦听端口。 Ant写出BUILD SUCCESSFUL并且没有退出。
Ant等待服务器窗口关闭。
我已经尝试了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>
这是bat文件:
call .\bcmenv.bat
start /min .\startLocator.bat
sleep 5
start /min .\startServices.bat
exit
我尝试使用forget
标记执行此操作,使用start
,start /b
和call
,但没有任何帮助。在服务器窗口关闭之前,Ant无法完成任务。
如果我使用没有forget
的spawn,Ant会在退出目标时关闭服务器窗口。它将spawn与forget结合使用,在服务器窗口关闭之前,Ant目标不会完成。
我接下来可以尝试什么?
答案 0 :(得分:0)
您可以创建另一个启动服务器的批处理文件,并使用start
命令立即返回:
start <path_to_server_bat> <args>
您是否尝试过spawn=true
?