use*_*818 4 java ant directory configuration properties
我的应用程序有许多属性/文本配置文件.有没有一种通用的方法来验证这些类型的文件?可能是一些工具或类似xsd的东西?文件很大(超过1000行),所以我经常犯错误.大多数情况下的文件信息 - 是不同目录的路径.因此,如果它们存在且一致,那将是好的.例如,如果我有
mydata.root="c:\data"
Run Code Online (Sandbox Code Playgroud)
在我有:
myreports=${mydata.root}/reports
Run Code Online (Sandbox Code Playgroud)
这将很好地检查c:\ data和c:\ data\report是否存在
而不是写(几百行),例如
myreports=${mdata.root}/reports
Run Code Online (Sandbox Code Playgroud)
您可以在构建文件中执行此验证.
例如,以下构建文件定义了一个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>
Run Code Online (Sandbox Code Playgroud)
您需要决定何时验证属性,并且需要明确验证它们 - 如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
Run Code Online (Sandbox Code Playgroud)
您可以将输出粘贴到构建文件中.