如何用Ant任务检测Windows服务器组件版本?现有实现遇问题
Ant组件版本检测任务修正与方案
你的PHP版本检测任务问题分析
原任务写法错误,导致输出Windows版本而非PHP版本。原因是:
- 调用
cmd.exe时未使用/c参数,该参数用于告诉cmd执行后续命令后退出; - 将
php -version作为单个参数传递,cmd无法解析为执行PHP命令,反而会输出自身版本信息。
正确的PHP版本检测实现
提供两种可行写法:
写法一:直接调用PHP(推荐,若PHP在系统PATH中)
<target name="getVersionPHP" description="获取PHP版本"> <exec executable="php" output="${php.dest}/version.txt"> <arg value="-version"/> </exec> </target>
写法二:通过cmd.exe调用(适用于PHP不在PATH的场景)
<target name="getVersionPHP" description="获取PHP版本"> <exec executable="cmd.exe" output="${php.dest}/version.txt"> <arg value="/c"/> <arg value="php"/> <arg value="-version"/> </exec> </target>
其他组件的版本检测方案
针对你提到的其他组件,提供对应的Ant任务示例:
Java版本:Ant内置属性直接获取,无需exec任务
<target name="getVersionJava" description="获取Java版本"> <echo file="${java.dest}/version.txt">Java版本: ${java.version}</echo> </target>MySQL版本
<target name="getVersionMySQL" description="获取MySQL版本"> <exec executable="mysql" output="${mysql.dest}/version.txt"> <arg value="--version"/> </exec> </target>若MySQL不在PATH中,需指定完整执行路径,例如:
executable="C:/Program Files/MySQL/MySQL Server 8.0/bin/mysql.exe"PostgreSQL版本
<target name="getVersionPostgreSQL" description="获取PostgreSQL版本"> <exec executable="psql" output="${pgsql.dest}/version.txt"> <arg value="--version"/> </exec> </target>Apache版本
<target name="getVersionApache" description="获取Apache版本"> <exec executable="httpd" output="${apache.dest}/version.txt"> <arg value="-v"/> </exec> </target>Windows环境下需使用
httpd.exe,若为集成环境(如WAMP/XAMPP),需指定Apache bin目录下的完整路径。
内容的提问来源于stack exchange,提问作者mandy makore
相关产品推荐
相关产品推荐

