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

coo*_*fan 1 ant foreach

为了简单地解释它,这里是一个例子:

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

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

在 project.properties 中:

dest-dir=./destination
Run Code Online (Sandbox Code Playgroud)

在 build.xml 中:

<path id="gr-classpath"> ... </path>
<import file="local-db.xml" />
Run Code Online (Sandbox Code Playgroud)

在本地 db.xml 中:

<ant antfile="local-gr.xml" target="deploy" inheritAll="true" inheritRefs="true" />
Run Code Online (Sandbox Code Playgroud)

在 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>
Run Code Online (Sandbox Code Playgroud)

现在问题来了:

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

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

我为解决它所做的工作是在“deploy-single”中再次声明,但我根本不喜欢它。

为什么会发生这种情况?我该怎么做才能让它更优雅?

mar*_*ton 5

默认情况下,ant-contribforeach任务不会传播对其目标的所有属性和引用。但它确实有inheritall和inheritrefs属性,你可以用它来做到这一点。

<foreach list="${list1}" delimiter="," parallel="true" trim="true"
         param="item" target="deploy-single"
         inheritall="true" inheritrefs="true"
/>
Run Code Online (Sandbox Code Playgroud)