Ant属性可以解析其他属性吗



Ant属性是否可以通过属性文件设置,从属性文件解析其他属性?

例如,我可以这样做:

<property name="prop1" value="in_test_xml1" />
<property name="prop2" value="${prop1}" />

prop2变为"in_test_xml1"。这很好。

但在这种情况下,当使用输入属性文件时:

prop1=sample_prop
prop2=${prop1}

prop2未设置为"sample_prop"

因此,从其他属性解析属性似乎只有在进行解析的属性位于ant文件本身时才有效。

这是意料之中的事,还是我错过了什么?

Ant确实支持文件内属性扩展,有关属性任务,请参阅手册中的属性文件部分。

以下示例显示了正在解析的属性:

  • 在单个属性文件中
  • 从另一个属性文件中的一个属性
  • 在生成文件中

第一个属性文件:

$ cat props1.properties
prop1=world
prop2=hello ${prop1}

第二个属性文件:

$ cat props2.properties
prop3=goodbye ${prop1}

生成文件:

<project default="test">
  <property file="props1.properties"/>
  <property file="props2.properties"/>
  <property name="prop4" value="${prop3}, good luck"/>
  <target name="test">
    <echo message="prop1 = ${prop1}"/>
    <echo message="prop2 = ${prop2}"/>
    <echo message="prop3 = ${prop3}"/>
    <echo message="prop4 = ${prop4}"/>
  </target>
</project>

输出:

$ ant
Buildfile: build.xml
test:
     [echo] prop1 = world
     [echo] prop2 = hello world
     [echo] prop3 = goodbye world
     [echo] prop4 = goodbye world, good luck
BUILD SUCCESSFUL
Total time: 0 seconds

是否有其他类型的财产解决方案对您不起作用?

编辑

根据您的评论,我现在了解到您正在使用-propertyfile命令行选项为Ant指定要加载的属性文件(而不是像我上面所做的那样在构建文件本身中指定文件)。

我对此进行了快速测试,发现Ant 1.7.1没有对使用该命令行选项加载的文件进行文件内属性扩展。但Ant 1.8.2确实如此。

这是蚂蚁虫18732。您应该能够通过更新您的Ant版本来解决问题。

此任务的一个更简单的解决方案是使用Ant contrib Tasks:Propertycopy

来自手册:

<property name="org" value="MyOrg" />
<property name="org.MyOrg.DisplayName" value="My Organiziation" />
<propertycopy name="displayName" from="org.${org}.DisplayName" />
Sets displayName to "My Organiziation".

相关内容

  • 没有找到相关文章

最新更新