【问题标题】:Ant conditional if within a macrodefAnt 条件 if 在宏定义中
【发布时间】:2013-08-13 10:01:09
【问题描述】:

在 ant 中,我有一个宏定义。

假设我必须使用这个宏定义,并且如果属性special.property 存在并且为真,那么我想在所说的宏定义中运行一个项目,我该怎么办?

我现在有

<macrodef name="someName">
    <sequential>
        <someMacroDefThatSetsTheProerty  />
        <some:thingHereThatDependsOn if="special.property" />
    <sequential>
</macrodef>

这不起作用 - some:thingHereThatDependsOn 没有“if”属性,我无法添加一个。

antcontrib 不可用。

有了一个目标,我可以给目标一个“如果”,我可以用宏定义做什么?

【问题讨论】:

  • ANT 中的条件执行在任务级别不起作用,它适用于目标。也许提供更多关于你正在尝试做的事情的细节。
  • 为什么不能使用ant contrib? (或者像 BeanShell 这样的 Ant 中的脚本语言。)Ant 并不打算用于目标中的条件逻辑。仅针对目标本身。引入 Ant contrib 是为了解决这个问题。 Ant contrib 是一个开源 jar。为什么你不能提供它?说你不能使用 ant contrib 感觉有点像在说“我需要解决这个问题,但我的代码中不允许使用任何空格”
  • @MarkO'Connor 老实说,我只是想知道这是否可能。
  • @JeanneBoyarsky 仅仅因为某些东西是“开源的”并不意味着“它可以被使用”。在我的特定情况下,是的,我可以访问 ant contrib。这是一个更多关于“是否可能”的问题,我想这意味着“它不是”。

标签: ant


【解决方案1】:

在 Ant 1.9.1 及更高版本中,现在有 ifunless attributes 的新实现。这可能是你的想法。

首先,您需要将它们放入您的命名空间。将它们添加到您的 &lt;project&gt; 标头中:

<project name="myproject" basedir="." default="package"
    xmlns:if="ant:if"
    xmlns:unless="ant:unless">

现在,您可以将它们添加到几乎任何 Ant 任务或子实体中:

<!-- Copy over files from special directory, but only if it exists -->
<available property="special.dir.available"
    file="${special.dir} type="dir"/>

<copy todir="${target.dir}>
    <fileset dir="${special.dir}" if:true="special.dir.available"/>
    <fileset dir="${other.dir}"/>
</copy>

<!-- FTP files over to host, but only if it's on line-->
<condition property="ftp.available">
    <isreachable host="${ftp.host}"/>
</condition>

<ftp server="${ftp.host}" 
    userid="${userid}"
    passowrd="${password}"
    if:true="ftp.available">
    <fileset dir=".../>
</ftp>

【讨论】:

  • 我使用的是 ant 版本 1.9.2。在那,“if:true”没有调用宏定义。它不工作。
【解决方案2】:

这只有在 ANT "thingHereThatDependsOn" 任务支持 "if" 属性时才有可能。

如上所述,ANT 中的条件执行通常只适用于目标。

<target name="doSomething" if="allowed.to.do.something">
   ..
   ..
</target>

<target name="doSomethingElse" unless="allowed.to.do.something">
   ..
   ..
</target>

<target name="go" depends="doSomething,doSomethingElse"/>

【讨论】:

  • 这不再准确。 Ant 1.9.1 具有新的ifunless 属性。
猜你喜欢
  • 1970-01-01
  • 2019-09-10
  • 2017-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-25
  • 1970-01-01
  • 2021-05-31
相关资源
最近更新 更多