apache - 根据变量的值将参数传递给 apache-ant exec 任务

标签 apache ant if-statement exec

我只用 apache-ant不是 ant-contrib
我有一个 ant目标

<target name="stop" depends="init" >
...
</target>

我想在其中调用 exec任务。

如果变量的值HOST_NAMEall
<exec executable="${executeSSH.shell}" >
    <arg value="-h ${HOST_NAME}" />
    <arg value="-i ${INSTANCE}" />
    <arg value="-w 10" />
    <arg value="-e ${myOperation.shell} " />
    <arg value=" -- " />
    <arg value="${INSTANCE} ${USERNAME} ${PASSWORD}" />
</exec>

如果变量的值HOST_NAMEanything else
<exec executable="${executeSSH.shell}">
    <arg value="-h ${HOST_NAME}" />
    <arg value="-i ${INSTANCE}" />
    <arg value="-e ${myOperation.shell} " />
    <arg value=" -- " />
    <arg value="${INSTANCE} ${USERNAME} ${PASSWORD}" />
</exec>

但我只想写一个任务,不再重复 exec .我用过 HOST_NAME参数但如何处理第二个参数 -w 10这在两次调用中都不同。

我通过使用 condition 搜索 SO 尝试了几种方法。和 if else但似乎没有什么适用于 execarg .

最佳答案

尝试使用宏定义。以下示例未经测试。

<macrodef name="callSSH">
    <element name="extArgs" optional="y"/>
    <sequential>
        <exec executable="${executeSSH.shell}" >
            <arg value="-h ${HOST_NAME}" />
            <arg value="-i ${INSTANCE}" />
            <extArgs/>
            <arg value="-e ${myOperation.shell} " />
            <arg value=" -- " />
            <arg value="${INSTANCE} ${USERNAME} ${PASSWORD}" />
        </exec>
    </sequential>
</macrodef> 
<target name="stop" depends="init" >
    <if>
       <equals arg1="${HOST_NAME}" arg2="all"/>
        <then>
            <callSSH>
                <extArgs>
                    <arg value="-w 10" />
                </extArgs>
            </callSSH>
        </then>
        <else>
            <callSSH>
                <extArgs/>
            </callSSH>
        </else>
    </if>
</target>

或者,如果您不使用 contribs:
<target name="sshExecWithHost" if="HOST_NAME"> 
    <callSSH>
        <extArgs>
            <arg value="-w 10" />
        </extArgs>
    </callSSH>
</target>

<target name="sshExecNoHost" unless="HOST_NAME">
    <callSSH/>
</target>

<target name="sshSwitch" depends="sshExecNoHost,sshExecWithHost">
</target>

<target name="stop" depends="init,sshSwitch" >
</target>

关于apache - 根据变量的值将参数传递给 apache-ant exec 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11840284/

相关文章:

apache - Debian 10 上的 Awstats - 访问次数太少 - 修复它的选项

java - 寻找使用 JUnit 和 Ant 的开源 Java 项目

if-statement - 以空单元格为键进行电子表格查找

arrays - 一个新工作表是另一个工作表的实时过滤版本?

Apache 错误 - 无效参数和虚假版本

apache - 有什么办法可以更改 Apache VirtualHosts 首先加载的顺序吗?

java - Ant:当路径包含 refid 时如何回显路径?

java - 从 Ant build.xml 中的 .properties 文件中读取

php - return true 不返回或我的 else 声明不起作用?

apache - Apache 中托管的 Subversion 偶尔出现 "connection refused"错误