Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ant-var与属性范围_Ant - Fatal编程技术网

Ant-var与属性范围

Ant-var与属性范围,ant,Ant,我有一个调用各种目标的主构建脚本。其中一个目标需要存储一个值,另一个目标需要显示该值。显然这不起作用,所以我认为这可能与范围有关。我尝试了var、property和在target1之外声明属性。因为var似乎是可变的,所以看起来我需要使用它,但每次我的输出都是空的 主脚本 <antcall target="target1"/> <antcall target="display"/> 在target1中: <var name="myVar" value="${a

我有一个调用各种目标的主构建脚本。其中一个目标需要存储一个值,另一个目标需要显示该值。显然这不起作用,所以我认为这可能与范围有关。我尝试了var、property和在target1之外声明属性。因为var似乎是可变的,所以看起来我需要使用它,但每次我的输出都是空的

主脚本

<antcall target="target1"/>
<antcall target="display"/>

在target1中:

<var name="myVar" value="${anotherVar}"/>

在显示中:

<echo>${myVar}</echo>
${myVar}

antcall将在新项目中启动ant目标,并且不会以任何方式影响主项目。尝试从antcontrib运行目标以在同一项目中运行目标。

您可以使用一个
antcall
元素调用多个目标。然后,这些目标将共享一个项目实例,包括定义的属性。要执行此操作,请将目标指定为嵌套元素,如下所示:

<antcall>
  <target name="target1"/>
  <target name="display"/>
</antcall>

我找到的另一个选项是antcallback,它似乎可以工作。这将返回的内容限制为一个特定的值列表,这似乎比打开整个目标的范围更安全(因为它设置、创建、修改了许多var和属性)


我认为所有这些都是有效的解决方案,这取决于您想要更改变量范围的级别。

您真的需要使用吗?您可以改用目标依赖项吗

正如您所怀疑的,使用基本上创建了一个新的作用域。


<antcall target="display">
   <param name="param1" value="anything" />
</antcall>

将上述代码放入您的target1中。我相信您现在可以在显示器上访问param1。

这是一个有趣的想法。在这两者之间我还有其他目标电话。我可以将它们全部添加到其中,但是如果我将它们全部更改为runtarget,那么我将面临相同的范围/安全问题。但无论哪种方式,这都是一种折衷。这只在Ant1.6.3中得到支持,否则您将看到:“任务不支持嵌套的“target”元素。”这在两个目标之间不共享属性。我们现在有一个依赖项混乱,正在尝试对共享目标进行组件化,以删除任何内部依赖项,并在共享目标时进行一些清理。经常使用,因为有嵌套的标记。+1:感谢您的提示。使用
runtarget
我可以轻松地清理构建文件。
<antcall target="display">
   <param name="param1" value="anything" />
</antcall>