如何使用Ant复制目录

我已经使用copydir来复制目录树,但不推荐使用。 我的目录包含一些子目录,其中一些包含文件和其他包含更多的子目录。

我怎样才能复制整个树?

  <copy todir="${dest.dir}" > <fileset dir="${src.dir}" includes="**"/> </copy> 

相信会做你想做的…(recursion复制完成)

复制包括目录本身的内容。

 <copy todir="${dest.dir}" > <fileset dir="${src.dir.parent}"> <include name="${src.dir}/**"/> </fileset> </copy> 

你只需要指定目录(不包括includes属性):

 <copy todir="../new/dir"> <fileset dir="src_dir"/> </copy> 

有关更多详细信息和示例,请参阅手册 。

复制包括目录本身的内容。

 <copy todir="${dest.dir}" > <fileset dir="${src.dir.parent}" includes="${src.dir}/**"/> </copy> 

从这里的示例中,您可以使用复制任务编写一个简单的Ant文件。

 <project name="MyProject" default="copy" basedir="."> <target name="copy"> <copy todir="./new/dir"> <fileset dir="src_dir"/> </copy> </target> </project> 

这应该将src_dir (不包括它)中的所有内容复制到new/dir

一个很好的观点:如果源文件比目标文件更新,ant将只复制子目录。 [1]在我的情况下,sub-dirs没有被复制(我使用verbose =“true”),因为没有变化,他们已经在目的地。 您可以使用“覆盖”来强制它,或触摸您的源子目录中的一些文件。

我添加一个更通用的模式来复制所有子文件夹。

 <copy todir="${dest.dir}" > <fileset dir="${src.dir}" includes="**/*"/> </copy> 

详情请参阅模式 。

我使用了include标签,如下面的代码片段所示,在我的build.xml文件中复制individuald个jar文件到一个目录中。

 <target name="devInstall" depends="generateXsl" description="testing"> <copy flatten="true" todir="${test}/WEB-INF/lib" overwrite="${overwrite}"> <fileset refid="buildJars"/> <fileset dir="lib"> <include name="commons-collections-*.jar"/> <include name="commons-io-*.jar"/> <include name="kodo/*.jar"/> <include name="mail*.jar"/> <include name="activation*.jar"/> <include name="guava*.jar"/> <include name="jna*.jar"/> </fileset> </copy> </target> 

另一个ant的任务是Copydir 。 这里的关键部分是包含要在dest目录之后复制的目录的名称。 子目录和文件将被自动复制。

 <target name="-post-jar"> <copydir src="config" dest="${dist.dir}/config/"/> </target> 

此代码应该复制文件夹以及其内容。 它还使用基本名称任务来避免必须执行任何手动path分析。

 <project name="Build" default="doCopy"> <property name="source.dir" value="SourceDirPathGoesHere"/> <property name="dest.dir" value="DestinationDirPathGoesHere"/> <target name="doCopy"> <basename property="source.dir.base.name" file="${source.dir}"/> <copy todir="${dest.dir}"> <fileset dir="${source.dir}/.." includes="${source.dir.base.name}/**"/> </copy> </target> </project> 

我最终使用下面的代码复制

 <copy todir="${root.dir}/dist/src"> <fileset dir="${root.dir}/build/src" includes="**"/> </copy> 

这将从dist复制src文件夹进行构build。

希望这有助于某人。