[ANT]属性和Classpathref继承在“foreach”中被破坏

时间:2011-07-20 09:29:22

标签: ant foreach

简要解释一下,这是一个例子:

在build.xml中,导入了local-db.xml。在local-db.xml中,有一个名为“warmup”的目标,它使用task调用第三个文件的一个目标 - local-gr.xml。

导入所有公共属性和类路径defs并在build.xml中设置。

在project.properties中:

dest-dir=./destination
build.xml中的

<path id="gr-classpath"> ... </path>
<import file="local-db.xml" />

在local-db.xml中:

<ant antfile="local-gr.xml" target="deploy" inheritAll="true" inheritRefs="true" />

在local-gr.xml中,有两个这样的目标:

<target name="deploy">
    <tar ....../>
    <foreach list="${list1}" delimiter="," parallel="true" trim="true" param="item" target="deploy-single" />
</target>

<target name="deploy-single">
    something using property ${dest-dir} and path "gr-classpath"
</target>

现在问题在于:

属性$ {dest-dir}和路径“gr-classpath”可以在“deploy”中使用,因为我设置了inheritAll和inheritRefs,但它不能直接在“deploy-single”中使用。当foreach调用目标时,“inherit”不会出现吗?

我设法在$的帮助下将$ {dest-dir}传递给“deploy-single”,但我没有找到任何方法将classpathref“gr-classpath”传递给“deploy-single”。

我所做的就是在“部署单一”中再次声明,但我完全不喜欢它。

为什么会这样?我该怎么做才能让它更优雅?

1 个答案:

答案 0 :(得分:4)

ant-contrib foreach task默认情况下不传播所有属性和对其目标的引用。但它确实具有inheritallinheritrefs属性,可用于实现此目的。

<foreach list="${list1}" delimiter="," parallel="true" trim="true"
         param="item" target="deploy-single"
         inheritall="true" inheritrefs="true"
/>