在Ant中取消属性和使用条件删除属性

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 属性,它就会运行。

1个回答

9

Ant手册属性任务中提到:

属性是不可变的:谁先设置属性,就冻结了整个构建过程中的该属性;它们绝对不是变量。

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

  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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接