我的团队ant任务使用属性文件标记从build.properties
文件中提取特定于开发人员的信息:
<property file="${user.home}/build.properties.txt" />
然而,当这个文件丢失时,ant继续无论如何。稍后在构建过程中,它会尝试访问尚未定义的属性,并尝试以${user.name}
和其他类似错误登录svn服务器。这些错误很难调试,因为我使用的一些ant任务没有提供有用的错误消息。
我的主要问题是:如果无法找到属性文件,有没有办法让ant快速失败?
答案 0 :(得分:8)
我认为你可以结合使用和失败:
如果文件存在,则设置属性
<available file="${user.home}/build.properties.txt" property="build.properties.present"/>
如果未设置属性,则失败
<fail unless="build.properties.present"/>
答案 1 :(得分:8)
您可以先添加显式检查。类似的东西:
<fail message="Missing build.properties">
<condition>
<not>
<available file="${user.home}/build.properties.txt" />
</not>
</condition>
</fail>
可能会成功。
答案 2 :(得分:5)
我建议,不要测试是否存在特定的属性文件,而是测试属性定义。这样,可以以不同的方式提供此属性(例如,-Duser.name=myname
)。
您可以在失败消息中提供建议的文件名。
E.g
<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>
答案 3 :(得分:2)
使用目标“loadproperties”ant任务而不是“属性文件” =“...”&gt;,因为后面的任务不会抱怨如果文件丢失,这是你的情况。 在缺少属性的情况下,loadproperties任务将始终使构建失败。
答案 4 :(得分:0)
或更短
<project xmlns:fl="antlib:it.haefelinger.flaka">
...
<fl:fail message="Houston we have a problem" test="!'${user.home}/build.properties.txt'.tofile.exists"/>
...
</project>