Ant - 在.properties文件中使用变量

时间:2016-04-10 07:46:04

标签: ant

我正在尝试使用 copy 任务替换源文件中的占位符和.properties文件中定义的值**

我的build.xml包含

  <target name="configure">
    <echo message="Creating DB configuration" />
    <copy todir="${dir.out}" overwrite="true">
      <fileset dir="${dir.in}" />
      <filterchain>
        <expandproperties/>
        <replacetokens begintoken="&lt;" endtoken="&gt;" propertiesResource="conf.properties" />
      </filterchain>
    </copy>
  </target>

来自conf.properties的示例:

tbs.base_directory = d:/oracle/oradata/my_app
tbs.data_file = ${tbs.base_directory}/data01.dbf

我想从.properties文件中引用变量,在这种情况下,我想在 tbs.data_file 中替换 tbs.base_directory

不幸的是它没有被替换。有什么想法吗?

由于

1 个答案:

答案 0 :(得分:1)

问题是expandproperties适用于复制文件而不适用于您用于定义令牌的属性资源。一种可能的解决方案是首先加载conf.properties以强制扩展属性并将其转储到用于令牌替换的临时文件中。以下内容应该有效:

<target name="configure">
    <echo message="Creating DB configuration" />
    <!-- force expanding properties in tokens property file -->
    <loadproperties srcfile="conf.properties" />
    <!-- dump expanded properties in a temp file -->
    <echoproperties prefix="tbs" destfile="conf.expanded.properties"/>
    <copy todir="${dst.out}" overwrite="true">
          <fileset dir="${dir.in}" />
          <filterchain>
              <expandproperties/>
            <!-- use temporary file for token substitution -->
            <replacetokens begintoken="&lt;" endtoken="&gt;" propertiesResource="conf.expanded.properties" />
          </filterchain>
    </copy>
    <!-- delete temp file (optinal)-->
    <delete file="conf.expanded.properties"/>
</target>

这个解决方案的缺点是它只有在您可以选择要在临时文件中写入的属性时才起作用(即conf.properties文件中的所有属性都以相同的前缀开头)。