你可以在你的構建文件中做這個驗證。
例如,以下構建文件定義了一個macrodefvalidate-file-property
,它驗證指定的屬性是否已定義,並且是否存在文件系統中的文件或目錄。
<project default="init">
<property file="test.properties"/>
<target name="init">
<validate-file-property property="program.files" type="dir"/>
<validate-file-property property="mydata.root" type="dir"/>
<validate-file-property property="foo"/>
</target>
<macrodef name="validate-file-property">
<attribute name="property"/>
<attribute name="type" default="file"/>
<sequential>
<fail unless="@{property}" message="The property '@{property}' is undefinded."/>
<available file="${@{property}}" property="@{property}.exists" type="@{type}"/>
<fail unless="@{property}.exists" message="The @{type} '@{property}' with value '${@{property}}' does not exist."/>
</sequential>
</macrodef>
</project>
你需要決定何時驗證屬性,你需要明確驗證它們 - 因爲顯示在這個例子中,init
目標。
順便說一句,如果您使用標準化模式來命名涉及文件或目錄的屬性 - 例如my.special.file
,my.build.dir
- 然後您可以使用shell腳本來發現所有相關屬性並編寫所有validate-file-property
元素。例如:
awk -F= '/\.(file|dir)/{ printf "<validate-file-property property=\"%s\" type=\"%s\"/>\n", $1, gensub(/.*\.(file|dir)/, "\\1", "g", $1) }' *.properties
您可以將輸出粘貼到您的構建文件中。
這個'$ {}'的東西只適用於Ant進程;也就是說,如果它位於Ant進程之外,它不能從簡單的'.properties'文件中運行。它不會使用Java'Properties'類的'load()'方法。無論如何,你可以在Ant進程中檢查文件/文件夾的存在性,如下所示[http://stackoverflow.com/questions/1163998/do-i-have-any-way-to-check-the-existence-of -a-目錄中,螞蟻不-A-文件(http://stackoverflow.com/questions/1163998/do-i-have-any-way-to-check-the-existence-of-a-目錄在螞蟻不是一個文件) – ecle