-1

我正在从其他目标(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_callExec"/>
    <if>
        <isset property="result"/>
        <then>
             <echo>Result: ${result}</echo>
        </then>
        <else>
            <echo>Propert result is not set yet !! </echo>
        </else>
    </if>
</target>

现在我从 targetCalled 调用一个 exec,如下所示:

<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>

在我的 count_client_server_inner_classes.sh 中,我退出状态为:退出“$result”它给了我“:需要数字参数”

我希望那个可执行文件应该返回一个字符串,这可能吗?

我想在我的 targetCalled 和 targetCaller 中使用这个返回值。但是当我呼应结果属性时..它给了我255。有人能指出我哪里出错了吗?

4

1 回答 1

0

Ant 不是一种脚本语言。这不是描述构建的好方法——但它是一种糟糕的脚本语言。尝试使用伪函数调用和 if/else 编写 ant 脚本会很糟糕。一般来说,远离if/ else- 如果你发现你需要它们,你可能想要重新评估你的工具选择。不惜一切代价避免antcall- 它启动了一个新的 jvm 并制作了一些疯狂的意大利面条 - 使用依赖来控制目标之间的执行流程。

要回答您的一个问题 - 结果属性始终是退出代码,在 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>

如果您确实必须提供自定义错误状态,您可以将结果属性设置为您在哪里,然后您可以:

<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>

我承认我实际上并没有运行上面的片段,你可能需要按摩一下,但我很确定他们会去的。关于样式的另一个编辑说明:目标通常使用-而不是_.分隔单词,其中属性使用.

于 2013-08-22T18:00:59.787 回答