【问题标题】:How to validate properties/custom configuration files?如何验证属性/自定义配置文件?
【发布时间】:2011-12-12 08:28:02
【问题描述】:

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

mydata.root="c:\data"

在我拥有之后:

myreports=${mydata.root}/reports

最好检查一下 c:\data 和 c:\data\report 是否存在

并且没有写(向下几百行)例如

myreports=${mdata.root}/reports

【问题讨论】:

标签: java ant configuration properties directory


【解决方案1】:

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

例如,以下构建文件定义了一个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.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

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

【讨论】:

    【解决方案2】:

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

    这里是一个link 给悬赏问题,以防你想看到回复的稀疏性。

    【讨论】:

      猜你喜欢
      • 2016-06-11
      • 2020-04-18
      • 1970-01-01
      • 2010-10-29
      • 2016-06-04
      • 1970-01-01
      • 2022-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多