Как проверить свойства / пользовательские файлы конфигурации? - PullRequest
4 голосов
/ 12 декабря 2011

Мое приложение имеет много свойств / текстовых файлов конфигурации. Есть ли общий способ проверки файлов такого типа? Может быть какие-нибудь инструменты или что-то вроде xsd? Файлы большие (больше 1000 строк), поэтому я часто ошибаюсь. Информация в файле в большинстве случаев - это путь к разным каталогам. Так что будет хорошо, если они существуют и последовательны. Например. если у меня есть

mydata.root="c:\data"

и после того, как я:

myreports=${mydata.root}/reports

это будет хорошая проверка, что c: \ data и c: \ data \ report существуют

и не записано (несколько сотен строк), например

myreports=${mdata.root}/reports

Ответы [ 2 ]

5 голосов
/ 12 декабря 2011

Вы можете выполнить эту проверку в вашем файле сборки.

Например, следующий файл сборки определяет 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

Вы можете вставить вывод в файл сборки.

1 голос
/ 14 декабря 2011

Однажды я предложил вознаграждение за информацию о языках конфигурации, отличных от XML, которые обеспечивают проверку схемы.К сожалению, таких языков конфигурации немного, и они далеко друг от друга.

Вот ссылка на заданный вопрос, если вы хотите увидеть скудность ответов.

...