Вы можете выполнить эту проверку в вашем файле сборки.
Например, следующий файл сборки определяет macrodef validate-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
- тогда вы можете использовать скрипт оболочки, чтобы обнаружить все соответствующие свойства и записать все ваши элементы validate-file-property
. Примерно так:
awk -F= '/\.(file|dir)/{ printf "<validate-file-property property=\"%s\" type=\"%s\"/>\n", $1, gensub(/.*\.(file|dir)/, "\\1", "g", $1) }' *.properties
Вы можете вставить вывод в файл сборки.