0

我有一个 xml 文件“versionreference.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

Development\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

4 回答 4

2

我强烈推荐使用免费的第三方XmlTask​​ 库:

构建.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
于 2014-01-09T16:36:13.050 回答
1

如果您<echoproperties/>在该<xmlproperty>行之后添加,您应该会看到属性已加载,但与您预期的不同。它们将类似于:

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

这是因为属性基于节点名称,并且在您的情况下,您有四个不唯一的“属性”子节点实例。您最好的选择可能是更改 xml,例如:

<BuildVersions>
    <major>1</major>
    ....
</BuildVersions>
于 2014-01-08T08:30:24.847 回答
1

当您在 xml 文件上说xmlpropertywithcollapseAttributes="true"时,它会展平嵌套元素。

详情: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"/>并作为普通属性访问它们!

于 2014-01-09T09:33:13.643 回答
0

如果VersionReference.xml正是您在问题中提到的与您的antbuild.xml相对应的位置。

我建议您使用对应于 basedir="" 的“..\..\Build\VersionReference.xml”更改您的绝对路径(如问题所述)。在你的项目中

这应该可以正常工作。

并考虑您的字符串格式要求。

我认为默认的 comma(,) 分隔值可以替换为 dot(.) 或根据您的要求通过以下语法进行操作

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

请在此链接上找到更多信息: 替换 Ant 属性中的字符

希望这可以帮助。

于 2014-01-10T15:12:52.150 回答