简要解释一下,这是一个例子:
在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”。
我所做的就是在“部署单一”中再次声明,但我完全不喜欢它。
为什么会这样?我该怎么做才能让它更优雅?
答案 0 :(得分:4)
ant-contrib foreach
task默认情况下不传播所有属性和对其目标的引用。但它确实具有inheritall
和inheritrefs
属性,可用于实现此目的。
<foreach list="${list1}" delimiter="," parallel="true" trim="true"
param="item" target="deploy-single"
inheritall="true" inheritrefs="true"
/>