ant filterset属性范围

时间:2012-06-18 22:09:57

标签: ant

我想使用filterset来写出替换设置为ant属性的变量的文件。如果我有一个嵌套的filterset,我可以传递属性,但不是refid;我正在重用过滤器,所以我想使用refid。

foo.old只包含foo=@foo@

这有效:

<target name="filterset-test1">
  <property name="bar" value="here is foo" />
  <copy file="foo.old" tofile="foo.new1">
    <filterset  begintoken="@" endtoken="@">
      <filter token="foo" value="${bar}" />
    </filterset>
  </copy>
</target>

这无法替换令牌:

<filterset id="test-filters" begintoken="@" endtoken="@">
  <filter token="foo" value="${bar}" />
</filterset>
<target name="filterset-test3">
  <property name="bar" value="property doesn't pass thru" />
  <copy file="foo.old" tofile="foo.new3">
    <filterset refid="test-filters" />
  </copy>
</target>

有办法做后者吗?我也尝试编写属性文件并将其用作filtersfile属性。

1 个答案:

答案 0 :(得分:4)

问题似乎是在顶级过滤器内:

<filterset id="test-filters" begintoken="@" endtoken="@">
  <filter token="foo" value="${bar}" />
</filterset>

属性bar未定义。移动目标bar之外的filterset-test3的属性定义应该有效:

<?xml version="1.0" encoding="UTF-8" ?>
<project name="filter-test">

  <property name="bar" value="property doesn't pass thru" />

  <filterset id="test-filters" begintoken="@" endtoken="@">
    <filter token="foo" value="${bar}" />
  </filterset>

  <target name="filterset-test3">
    <copy file="foo.old" tofile="foo.new3">
      <filterset refid="test-filters" />
    </copy>
  </target>
</project>