【问题标题】:How to copy a directory using Ant如何使用 Ant 复制目录
【发布时间】:2010-12-13 17:09:22
【问题描述】:

我已使用copydir 复制目录树,但已弃用。我的目录包含一些子目录,其中一些包含文件,而另一些包含更多子目录。

如何复制整棵树?

【问题讨论】:

  • 听起来你想做一个递归复制。这就是 Omnipresent 提供的解决方案。如果问题中出现“recursive”这个词,可能会有更多人发现这个问题。

标签: java ant


【解决方案1】:
<copy todir="${dest.dir}" >  
    <fileset dir="${src.dir}" includes="**"/>  
</copy> 

相信它会做你想做的......(递归复制完成)

【讨论】:

  • 显然,当您想要一切时,includes 不是必需的(请参阅用户 s1n 的回答)
  • 复制 {src.dir} 的内容,而不是实际目录
  • 复制不是做但它的内容。
  • 既然你是被接受的答案,你可以改正它成为正确的答案(ery的答案是正确的);-)
  • 我认为 SO 的想法是集体管理,这就是为什么任何人都可以编辑其他人的问题(尽管您需要很多代表才能跳过编辑审查)。
【解决方案2】:

您应该只需要指定目录(没有包含属性):

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

有关更多详细信息和示例,请参阅manual

【讨论】:

  • @s1n 此命令仅将 src_dir 的所有内容复制到 ../new/dir 而不是 src_dir。我们如何将 src_dir(目录)复制到另一个位置?
【解决方案3】:

从例子here,你可以使用复制任务编写一个简单的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

【讨论】:

  • 这只是复制目录的内容。不是包括直接在内的内容。 :(
【解决方案4】:

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

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

注意:${src.dir} 是相对于 ${src.dir.parent} 的,而不是完整路径

【讨论】:

  • 这应该是正确的答案。另一个答案是针对“如何使用 Ant 复制目录的内容”这个问题。有细微的差别。
  • “这应该是正确的答案”:当然,尽管当您无法使用预期的路径名加载资源时,差异并不那么微妙。
  • 对 ant 1.8 不起作用,好像什么也没发生。
  • @CCC 确保 ${src.dir} 是 相对 到 ${src.dir.parent},而不是完整路径
  • 非常误导x.parent 不应该是xparent... -_-
【解决方案5】:

一个很好的点:如果源文件比目标文件新,ant 只会复制子目录。 [1] 在我的情况下,子目录没有被复制(我使用的是 verbose="true"),因为没有任何更改并且它们已经在目标中。您可以使用“覆盖”来强制它,或触摸源子目录中的一些文件。

【讨论】:

    【解决方案6】:

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

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

    【讨论】:

    【解决方案7】:

    此代码应复制文件夹及其内容。它还使用 basename 任务来避免必须进行任何手动路径解析。

    <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>
    

    【讨论】:

      【解决方案8】:

      我终于用下面的代码复制了

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

      这会将 src 文件夹从 dist 复制到 build。

      希望这对某人有所帮助。

      【讨论】:

      • 它确实说它会复制相反的方式:P
      【解决方案9】:

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

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

      详情请见Patterns

      【讨论】:

        【解决方案10】:

        我在 build.xml 文件中使用了如下代码 sn-p 所示的包含标签来复制目录中的各个 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>
        

        【讨论】:

          【解决方案11】:

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

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

          【讨论】:

          • 来自您的链接:此任务已被弃用。请改用复制任务。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多