3

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

foo.old 只包含foo=@foo@

这有效:

<target name="filterset-test1">
  <property name="bar" value="这里是 foo" />
  <copy file="foo.old" tofile="foo.new1">
    <filterset begintoken="@" endtoken="@">
      <filter token="foo" value="${bar}" />
    </filterset>
  </复制>
</目标>

这无法替换令牌:

<filterset id="test-filters" begintoken="@" endtoken="@">
  <filter token="foo" value="${bar}" />
</filterset>
<target name="filterset-test3">
  <property name="bar" value="property 不通过" />
  <copy file="foo.old" tofile="foo.new3">
    <filterset refid="测试过滤器" />
  </复制>
</目标>

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

4

1 回答 1

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>
于 2012-06-19T00:32:48.303 回答