文件/build.properties丢失时出现Ant警告/失败?

文件/build.properties丢失时出现Ant警告/失败?,ant,build-process,Ant,Build Process,My teams ant任务使用property file标记从build.properties文件中提取特定于开发人员的信息: <property file="${user.home}/build.properties.txt" /> 但是,当此文件丢失时,ant将继续。随后在构建过程中,它会尝试访问尚未定义的属性,并尝试以${user.name}和其他类似错误的身份登录到svn服务器。这些错误很难调试,因为我使用的一些ant任务没有给出有用的错误消息 我的主要问题是:如果a

My teams ant任务使用property file标记从
build.properties
文件中提取特定于开发人员的信息:

<property file="${user.home}/build.properties.txt" />

但是,当此文件丢失时,ant将继续。随后在构建过程中,它会尝试访问尚未定义的属性,并尝试以
${user.name}
和其他类似错误的身份登录到svn服务器。这些错误很难调试,因为我使用的一些ant任务没有给出有用的错误消息


我的主要问题是:如果ant找不到属性文件,有没有办法让它快速失败?

我认为可以将可用和失败结合起来:

设置文件存在时的属性

<available file="${user.home}/build.properties.txt" property="build.properties.present"/>

如果未设置属性,则失败

<fail unless="build.properties.present"/>

您可以先添加一个显式检查。比如:

<fail message="Missing build.properties">
  <condition>
    <not>
      <available file="${user.home}/build.properties.txt" />
    </not>
  </condition>
</fail>


我建议,与其测试特定属性文件是否存在,不如测试属性定义。这样,可以以不同的方式提供此属性(例如作为
-Duser.name=myname

您可以在失败消息中给出建议的文件名

例如


甚至更短的=


...
...
使用目标“loadproperties”ant任务而不是“property file” =“…”>,因为后一个任务不会抱怨文件丢失,这就是您的情况。
在缺少属性的情况下,loadproperties任务总是会使生成失败。

Gah。你也打败了我。不过,就个人而言,我不希望以额外的属性集结束,除非我要经常检查它们。@developmentalinsity我也希望你的解决方案:)我想我会接受这个答案但是,允许我不设置build.properties.present属性,而是选择测试应该始终存在于文件中的属性(老实说,它是该文件所需的主道具)。我觉得这更简洁,因为它允许我在不想创建prop文件的情况下从命令行
-Drequired.prop=val
。尽管这是我最初提出的问题的更正确答案(测试文件是否存在),@oers测试文件中属性集的解决方案在我看来是一个更干净的解决方案。谢谢。谢谢,我使用了@oers建议的语法来实现这个想法。我在他的回答的评论中注意到了这一点,
-D
语法对cronjobs等非常有用。因此我赞成这种方法。
<fail message="user.name property is not set.
    It is usually defined in ${user.home}/build.properties.txt">
  <condition>
    <not><isset property="user.name"/></not>
  </condition>
</fail>
<project xmlns:fl="antlib:it.haefelinger.flaka">
    ...
 <fl:fail message="Houston we have a problem" test="!'${user.home}/build.properties.txt'.tofile.exists"/>
    ...
</project>