Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ant 可选蚂蚁参数_Ant_Properties_Arguments - Fatal编程技术网

Ant 可选蚂蚁参数

Ant 可选蚂蚁参数,ant,properties,arguments,Ant,Properties,Arguments,我想有一个蚂蚁arg值选择性地包括,而不必作出2个目标,这将基本上是相同的,除了额外的arg。例如: <target name="A" depends="C">...</target> <target name="B" depends="C">...</target> <target name="C"> <java fork="true" ...> <jvmarg .../>

我想有一个蚂蚁arg值选择性地包括,而不必作出2个目标,这将基本上是相同的,除了额外的arg。例如:

<target name="A" depends="C">...</target>

<target name="B" depends="C">...</target>

<target name="C">
    <java fork="true" ...>
        <jvmarg .../>
        <arg .../>
        <arg .../>
        ...
        # now, if the dependency is from A, no more args
        # if from B
            <arg value="xxx"/>
    </java>
</target>
。。。
...
...
#现在,如果依赖项来自,则不再有参数
#如果来自B

您可以使用任务将
B
参数作为
参数传递,而不是依赖于任务C

<target name="A" >
  <antcall target="C" />
  ....
</target>

<target name="B" >
  <antcall target="C" >
    <param name="extra_arg" value="xxx" />
  </antcall>
  ...
</target>

<target name="C">
    <java fork="true" ...>
        <jvmarg .../>
        <arg .../>
        <arg .../>
        <arg value="${extra_arg}"/>
    </java>
</target>
进一步编辑: 由于我们无法将参数识别为可选参数,因此可以从每个父任务传入整个命令行。Target
A
只传递公共参数
B
将传递一个额外的参数。蚂蚁手册对它的解释比我好

<target name="A" >
  <antcall target="C">
    <param name="java_args" value="arg_a arg_b" /> 
  </antcall>
  ....
</target>

<target name="B" >
  <antcall target="C" >
    <param name="java_args" value="arg_a arg_b extra_arg" />
  </antcall>
  ...
</target>

<target name="C">
    <java fork="true" ...>
        <jvmarg .../>
        <arg line="${java_args}"/>
    </java>
</target>

....
...

您可以尝试使用“除非”语句。我自己对ant有点陌生,所以不确定这是否适用于args,但对于许多任务来说确实如此。看起来:args.allset是一个属性,您可以在一个目标中定义为“true”,在另一个目标中定义为“false”,但这不起作用。当A调用C时,它将抛出一个错误,因为在该阶段没有定义额外的参数。当B调用C时效果很好。仍然没有。它的效果与您原来的一样。表示“”不是有效的参数。似乎即使它是空的,它仍然试图强制它作为参数。@Nico-在这种情况下,我们选择更简单的选项如何。将所有参数设置为C参数,只需传递a?中的一个子集,这可能就是答案。请编辑你的答案,然后我会接受它的正确性。我也找不到别的办法。
<target name="A" >
  <antcall target="C">
    <param name="java_args" value="arg_a arg_b" /> 
  </antcall>
  ....
</target>

<target name="B" >
  <antcall target="C" >
    <param name="java_args" value="arg_a arg_b extra_arg" />
  </antcall>
  ...
</target>

<target name="C">
    <java fork="true" ...>
        <jvmarg .../>
        <arg line="${java_args}"/>
    </java>
</target>