我仍然是蚂蚁的新手,虽然我知道coldfusion,但我不太了解java约定,但我知道ant是使用java约定构建的。话虽这么说我正在开发一个将项目复制到临时文件夹的ant进程,更改项目中的一些代码,然后将临时目录推送到FTP。我试图从副本中排除我的所有git,eclipse和ant文件,这样我的测试平台就不会混乱。我设置了一个目标进行复制,但似乎Ant不仅忽略了我的排除(我确定我写错了),但它只是复制顶级目录和文件。没有递归副本。我目前的目标是:
<target name="moveToTemp" depends="init">
<delete dir="./.ant/temp" />
<mkdir dir="./.ant/temp" />
<copy todir="./.ant/temp">
<fileset dir=".">
<include name="*" />
<exclude name=".*/**" />
<exclude name=".*" />
<exclude name="build.xml" />
<exclude name="settings.xml" />
<exclude name="WEB-INF/**" />
</fileset>
<filterset>
<filter token="set(environment='design')" value="set(environment='testing')" />
</filterset>
</copy>
</target>
我知道我不是在做我的排除权利,但我不知道我做错了什么。我看到Ant中一直使用双星号(**),但我无法弄清楚
答案 0 :(得分:7)
默认情况下,Ant文件集将(递归地)包含指定目录下的所有文件,相当于:
<include name="**/*" />
这是隐含的包含。如果您提供包含,它将覆盖隐含的包含。
您的包含
<include name="*" />
表示'匹配文件集目录中的任何文件',但这会排除子目录的遍历,因此会出现问题。只复制文件和顶级目录。
请参阅Ant文档中的Patterns以获取基于目录的任务:**
匹配任何目录树(零个或多个目录)。
对于您的情况,您应该能够简单地删除“包含”,以便隐含的“包括所有”适用。
建议您调查defaultexcludes
task,它可以让您为整个项目设置一次这样的事情。
答案 1 :(得分:0)
回答问题的标题。您可以按如下方式包含空目录的副本。 (includeemptydirs 属性)
示例:
<copy includeemptydirs="true" todir="${directory}${file.separator}sentinel_files">
<fileset dir="${basedir}${file.separator}sentinel_files"/>
</copy>
使用以下提供的文档: