2011-06-15 73 views
1

我想检查ant构建脚本的参数是否设置。我尝试了很多方法来做到这一点,但没有成功。我用-Dmaindir="../propertyfolderpath"定义了参数。参数不为空

这是我试过的代码示例;

<ac:if> 
    <equals arg1="@{maindir}" arg2="" /> 
    <ac:then> 
     <echo message="maindir argument is empty. Current properties will be used." /> 
     <property file="build.properties" /> 
    </ac:then> 
    <ac:else> 
     <echo message="maindir = ${maindir}" /> 
     <ac:if> 
      <ac:available file="${maindir}/build.properties" type="file" /> 
      <ac:then> 
       <property file="${maindir}/build.properties" /> 
      </ac:then> 
      <ac:else> 
       <fail message="${maindir} is not a valid path." /> 
      </ac:else> 
     </ac:if> 
    </ac:else> 
</ac:if> 
  • 有三种情况;
    1. 参数可能未定义。蚂蚁应该先进入
    2. 参数定义的很好。用错误的道路

对于第二种情况脚本定义

  • 论证工作。 对于第三种情况,脚本正在工作。 但是对于第一种情况,我的意思是当我不定义maindir参数时,蚂蚁像第三种情况那样行事。这是我的问题。

    为什么蚂蚁会这样做?

  • 回答

    3

    也许你可以尝试设置参数的默认值?

    <condition property="maindir" value="[default]"> 
        <not> 
         <isset property="maindir"/> 
        </not> 
    </condition> 
    <echo message="${maindir}" /> 
    

    我想这和它的作品,在没有参数传递的${maindir}[default]

    +1

    我建议'[默认]'会变成'$ {basedir}' – 2011-06-15 10:13:50

    +0

    thx。这也适用于我。 Laepdjek和你的答案都是正确的。我用了两个答案。谢谢。而且Arne你是对的。我已经像'$ {basedir}'一样使用它了。 – Aykut 2011-06-15 10:39:40

    1

    它看起来像有两个问题:

    1. 在第一个等于条件,如果,你有@{maindir}。除非它是一个宏的参数,否则它应该是${maindir},与您示例的其余部分相同
    2. 如果尚未设置属性,则不会评估任何属性。因此,如果未定义主题,${maindir}将评估为${maindir},而不是空字符串。

    解决这个最简单的方法是@符号更改为$符号,并在开始添加语句属性默认值:

    <property name="maindir" value="." /> 
    

    这将默认属性到当前目录,所以你可以完全消除外部的,因为它不再需要。 ant中的属性是只读的,所以如果用户明确指定了一个值(例如从命令行),那么将使用该值,而上面的行不会产生任何影响 - 只有当用户不不指定主印度的值。

    事实上,我认为你可以完全通过执行以下操作摆脱蚂蚁的contrib的:

    <property name="maindir" value="." /> 
    <fail message="${maindir}/build.properties is not a valid path."> 
        <condition> 
         <not> 
          <available file="${maindir}/build.properties" /> 
         </not> 
        </condition> 
    </fail> 
    <property file="${maindir}/build.properties" /> 
    

    这应该有你正在寻找实现你的榜样是什么完全相同的效果。

    +0

    Thx Laepdjek。当我提到我对Alex的回答的评论时,这适用于我。 – Aykut 2011-06-15 10:41:03