我整天都在靠墙撞击我的头!
在下面的宏中,我总是以一个空文件集结束:
<macrodef name="gzipAndUploadFileset">
<attribute name="mimeType"/>
<element name="fileset"/>
<sequential>
<delete dir="${staging}" />
<copy toDir="${staging}">
<fileset refid="fileset"/>
</copy>
<fileset id="sfs" dir="${staging}" includes="**/*"/>
<echo>
${staging}
${ant.refid:sfs}
</echo>
</sequential>
</macrodef>
设置了staging
属性,并在复制操作后填充了50多个文件。
这就是echo&#39; d:
[echo] /path/to/staging
[echo] ${ant.refid:sfs}
我认为这意味着&#34; sfs&#34; fileset为空。我在includes
中添加了以查看该显式设置是否拾取了文件...但没有。
我试图在复制后进入睡眠状态,以防复制任务没有阻止。没有帮助。
我做错了什么?
答案 0 :(得分:1)
您应该不使用与现有ant任务相同的名称命名宏元素。我建议您将fileset
元素重命名为files
,例如:
<macrodef name="gzipAndUploadFileset">
<attribute name="mimeType"/>
<element name="files"/>
<sequential>
<delete dir="${staging}" />
<copy toDir="${staging}">
<files/>
</copy>
<fileset id="sfs" dir="${staging}" includes="**/*"/>
<echo>
${staging}
${ant.refid:sfs}
</echo>
</sequential>
您可以将files
元素视为占位符,在执行宏时将其替换为内容(请参阅macroDef)。
现在你可以像这样调用你的宏:
<target name="testmacro">
<gzipAndUploadFileset mimeType="application/x-gzip">
<files>
<fileset dir="src">
<includes name="**/*"/>
</fileset>
<files>
</target>