我的应用程序具有许多属性/文本配置文件。是否有验证此类文件的通用方法?可能是某些工具或类似xsd的东西?文件很大(超过1000行),因此我经常出错。在大多数情况下,文件中的信息-是指向不同目录的路径。因此,如果它们存在并保持一致,那将是很好的。例如,如果我有
mydata.root="c:\data"
然后我有:
myreports=${mydata.root}/reports
最好检查一下c:\ data和c:\ data \ report是否存在
而不是写(向下几百行),例如
myreports=${mdata.root}/reports
您可以在构建文件中进行此验证。
例如,以下构建文件定义了一个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
-那么你可以使用一个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
您可以将输出粘贴到构建文件中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句