如何验证属性/自定义配置文件?

时间:2011-12-12 08:28:03

标签: java ant configuration properties directory

我的应用程序有许多属性/文本配置文件。有没有一种通用的方法来验证这些类型的文件?可能是一些工具或类似xsd的东西? 文件很大(超过1000行),所以我经常犯错误。大多数情况下的文件信息 - 是不同目录的路径。因此,如果它们存在且一致,那将是好的。例如。 如果我有

mydata.root="c:\data"

之后我有:

myreports=${mydata.root}/reports

将很好地检查c:\ data和c:\ data \ report是否存在

而不是写(数百行),例如

myreports=${mdata.root}/reports

2 个答案:

答案 0 :(得分:5)

您可以在构建文件中执行此验证。

例如,以下构建文件定义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目标所示。

BTW,如果您使用标准化模式来命名引用文件或目录的属性 - 例如my.special.filemy.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

您可以将输出粘贴到构建文件中。

答案 1 :(得分:1)

我曾经提供过有关XML以外的配置语言的信息,这些语言提供了模式验证。不幸的是,这种配置语言很少见。

如果您想查看回复的稀疏程度,以下是有关问题的link