如何在ant目标和其他目标中使用exec exit status
我正在从另一个目标(targetCaller)调用一个目标(targetCalled),如下所示:如何在ant目标和其他目标中使用exec exit status,ant,build,ant-contrib,Ant,Build,Ant Contrib,我正在从另一个目标(targetCaller)调用一个目标(targetCalled),如下所示: <target depends="local.init" description="creating application jar file of the classes dir" name="run_check_server_client_jar_gen"> <antcall target="run_check_server_client_jar_c
<target depends="local.init"
description="creating application jar file of the classes dir"
name="run_check_server_client_jar_gen">
<antcall target="run_check_server_client_jar_callExec"/>
<if>
<isset property="result"/>
<then>
<echo>Result: ${result}</echo>
</then>
<else>
<echo>Propert result is not set yet !! </echo>
</else>
</if>
</target>
<target depends="local.init"
description="Running check for all classes in
client jar should also be present in server jar"
name="run_check_server_client_jar_callExec">
<exec executable="/bin/bash" resultproperty="${result}" failonerror="false">
<arg value="count_client_server_inner_classes.sh"/>
<arg value="gjf1common_client_classes.jar"/>
<arg value="gjf1common_classes.jar"/>
</exec>
<if>
<isset property="result"/>
<then>
<echo>Inside::Result: ${result}</echo>
</then>
<else>
<echo>Inside::Property result is not set yet !!!! </echo>
</else>
</if>
</target>
结果:${Result}
尚未设置属性结果!!
现在我从targetCalled调用一个exec,如下所示:
<target depends="local.init"
description="creating application jar file of the classes dir"
name="run_check_server_client_jar_gen">
<antcall target="run_check_server_client_jar_callExec"/>
<if>
<isset property="result"/>
<then>
<echo>Result: ${result}</echo>
</then>
<else>
<echo>Propert result is not set yet !! </echo>
</else>
</if>
</target>
<target depends="local.init"
description="Running check for all classes in
client jar should also be present in server jar"
name="run_check_server_client_jar_callExec">
<exec executable="/bin/bash" resultproperty="${result}" failonerror="false">
<arg value="count_client_server_inner_classes.sh"/>
<arg value="gjf1common_client_classes.jar"/>
<arg value="gjf1common_classes.jar"/>
</exec>
<if>
<isset property="result"/>
<then>
<echo>Inside::Result: ${result}</echo>
</then>
<else>
<echo>Inside::Property result is not set yet !!!! </echo>
</else>
</if>
</target>
Inside::Result:${Result}
Inside::尚未设置属性结果!!!!
在我的count_client_server_internal_classes.sh中,我退出状态为:
退出“$result”
它给了我“:需要数值参数”
我希望可执行文件应该返回一个字符串,这可能吗
我想在targetCaller和targetCaller中使用此返回值。
但是当我回应结果属性时。。它给了我255分。
有人能指出我哪里出了问题吗?Ant不是一种脚本语言。这不是一种很好的描述构建的方法,但它是一种糟糕的脚本语言。尝试用伪函数调用在ant中编写脚本,这样做会很糟糕。通常,远离
if
/else
——如果您发现需要它们,您可能需要重新评估您的工具选择。不惜一切代价避免antcall(antcall)——它会启动一个新的jvm,并产生一些疯狂的意大利面条——使用依赖来控制目标之间的执行流
要回答您的一个问题,result属性始终是退出代码,在bash的情况下,它始终是int 0-255
有趣的部分在bash脚本中。。。把它贴出来。它返回255,这是一个特殊代码-意味着它超出范围。我怀疑你让它返回字符串
您可以通过简单地出错来简化整个混乱:
<target name="run-check-server-client-jar-gen" depends="local-init"
description="creating application jar file of the classes dir">
<exec executable="/bin/bash" failonerror="true">
<arg value="count_client_server_inner_classes.sh"/>
<arg value="gjf1common_client_classes.jar"/>
<arg value="gjf1common_classes.jar"/>
</exec>
</target>
如果确实必须提供自定义错误状态,则可以将结果属性设置为where,然后可以:
<target name="run-check-server-client-jar-gen" depends="local-init"
description="creating application jar file of the classes dir">
<exec executable="/bin/bash" resultproperty="${return.code}">
<arg value="count_client_server_inner_classes.sh"/>
<arg value="gjf1common_client_classes.jar"/>
<arg value="gjf1common_classes.jar"/>
</exec>
<fail message="crazy shell script madness terminated abnormally.">
<condition>
<isfailure code="${return.code}"/>
</condition>
</fail>
</target>
我承认我实际上没有运行上面的代码片段,你可能需要做一些按摩,但我非常确定它们会运行。
另一篇关于风格的社论:目标通常使用-
而不是
或
来界定单词,属性使用