Анализ свойства xml в файле ant-build.xml

У меня есть XML-файл "versionreferance.xml". ниже кодировка

<?xml version="1.0" encoding="utf-8"?>
<!-- Update "revision" value to -1 when the next build is intended to have its revision as 0. This needs to be done for patch/release builds-->
<BuildVersions>
  <property name="major" value="1" />
  <property name="minor" value="0" />
  <property name="patch" value="0" />
  <property name="revision" value="93" />
</BuildVersions>

Другой - мой файл ant-build.xml.

<?xml version="1.0" encoding="UTF-8"?>
<project name="xmlproperty-demo" default="init">
    <xmlproperty file="versionreferance.xml" collapseAttributes="true" />
        <echo>Major : ${BuildVersions.major}</echo>
        <echo>Minor : ${BuildVersions.minor}</echo>
        <echo>Patch : ${BuildVersions.patch}</echo>
        <echo>Revision : ${BuildVersions.revision}</echo>
</project>

Я не получаю значение в выводе.

Я хочу получить путь к файлу versionReference.xml динамически, который будет в другом месте, чем antbuild.xml

Разработка \ Сложение \VersionReference.xml

Разработка \Src\JAAS API\antbuild.xml

Это должно быть динамически. Я могу получить значения из кода ниже. Но это не динамично.

<?xml version="1.0" encoding="UTF-8"?>
<project name="xmlproperty-demo" default="init">
    <xmlproperty file="C:\\Development\\Build\\versionreferance.xml" collapseAttributes="true" />
        <echo>Major : ${BuildVersions.major}</echo>
        <echo>Minor : ${BuildVersions.minor}</echo>
        <echo>Patch : ${BuildVersions.patch}</echo>
        <echo>Revision : ${BuildVersions.revision}</echo>
</project>

Я хочу получить значения только в этом формате.

<?xml version="1.0" encoding="utf-8"?>
<!-- Update "revision" value to -1 when the next build is intended to have its revision as 0.     This needs to be done for patch/release builds-->
<BuildVersions>
  <property name="major" value="1" />
  <property name="minor" value="0" />
  <property name="patch" value="0" />
  <property name="revision" value="93" />
</BuildVersions>

4 ответа

Решение

Если VersionReference.xml будет именно там, где вы упомянули в своем вопросе, в соответствии с вашим antbuild.xml.

Я бы предложил вам изменить ваш Абсолютный Путь (как упоминалось в вопросе) с помощью "..\..\Build\VersionReference.xml", что соответствует basedir="." в вашем проекте

Это должно работать нормально.

И учитывая ваши требования к формату строки.

Я думаю, что разделенное запятыми (,) значение по умолчанию может быть заменено точкой (.) Или изменено в соответствии с вашим требованием с помощью следующего синтаксиса

<propertyregex property="propB"
               input="${propA}"
               regexp=","
               replace="."
               global="true" />

Более подробную информацию вы найдете по этой ссылке: Замена символов в свойстве Ant

Надеюсь это поможет.

Я настоятельно рекомендую использовать бесплатную стороннюю библиотеку XmlTask:

build.xml

<taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask" />
<xmltask>
    <fileset file="versionreferance.xml"/>
    <copy path="/BuildVersions/property[@name = 'major']/@value" property="BuildVersions.major"/>
    <copy path="/BuildVersions/property[@name = 'minor']/@value" property="BuildVersions.minor"/>
    <copy path="/BuildVersions/property[@name = 'patch']/@value" property="BuildVersions.patch"/>
    <copy path="/BuildVersions/property[@name = 'revision']/@value" property="BuildVersions.revision"/>
</xmltask>

<echo>Major : ${BuildVersions.major}</echo>
<echo>Minor : ${BuildVersions.minor}</echo>
<echo>Patch : ${BuildVersions.patch}</echo>
<echo>Revision : ${BuildVersions.revision}</echo>

Выход

run:
     [echo] Major : 1
     [echo] Minor : 0
     [echo] Patch : 0
     [echo] Revision : 93

Если вы добавите <echoproperties/> после <xmlproperty> В строке вы должны увидеть свойства загружены, но не так, как вы ожидаете. Они будут примерно такими:

BuildVersions.property=,,,
BuildVersions.property.name=major,minor,patch,revision
BuildVersions.property.value=1,0,0,93

Это потому, что свойства основаны на именах узлов, и в вашем случае у вас есть четыре экземпляра дочернего узла "свойства", которые не являются уникальными. Лучшим вариантом может быть изменение XML, например:

<BuildVersions>
    <major>1</major>
    ....
</BuildVersions>

Когда ты сказал xmlproperty с collapseAttributes="true" в XML-файле это сгладит вложенные элементы.

Подробности: https://ant.apache.org/manual/Tasks/xmlproperty.html

Так просто сказать ${BuildVersions.major} не дает или не печатает значение как 1. Так как у вас есть элемент с именем xml 'prooerty', вы не сможете получить значение одного свойства

Например, в вашем случае ${BuildVersions.property.name} напечатаюmajor,minor,patch,revision'

Либо вы можете перепроектировать ваш versionreferance.xml, чтобы обеспечить работу xmlproperty. Или вы можете сделать это как файл свойств и сказать <property file="your.properties.file"/> и получить к ним доступ как к обычным свойствам!

Другие вопросы по тегам