7

你如何在ant中取消设置属性?所以它被完全删除为一个属性?

<condition property="proguard.config" value="proguard.cfg">
      <isset property="proguarded"/>
</condition>


 <condition property="proguard.config" value="">
      <not>
      <isset property="proguarded"/>
      </not>
</condition>

这似乎可行。然而,即使存在 proguard.config 这样的属性,proguard 也会运行。那么如何有条件地完全删除 proguard.config 作为属性呢?我知道,如果 proguard 发现 .properties 文件中有一个 proguard.config 属性,它将运行。

4

1 回答 1

9

Ant 手册 Property Task指出:

属性是不可变的:首先设置属性的人会在接下来的构建中冻结它;它们绝对不是变量。

话虽如此,有几个解决方法:

  1. 本地任务- 给定范围内的本地属性“阴影”在更高范围内的同名属性(在 Macrodefs 中特别有用)

  2. Ant-Contrib 可变任务- Ant-Contrib 提供了灵活性,但它也增加了依赖项,有时可能会诱使您编写可能在 Ant 脚本或自定义 Ant 任务中更好地表达的程序性 Ant 代码


在上面的示例中,如果proguarded在执行 Ant 项目期间该属性没有更改,则无需取消设置该属性。例如,您可以有条件地执行目标,如下所示:

<target name="proguarded-target" if="proguarded">
  ...
</target>

<target name="not-proguarded-target" unless="proguarded">
  ...
</target>
于 2012-05-18T05:54:04.673 回答