Анализ свойства 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"/>
и получить к ним доступ как к обычным свойствам!