Как скопировать каталог с помощью Ant

Я использовал copydir для копирования дерева каталогов, но он устарел. Мой каталог содержит некоторые подкаталоги, а некоторые из них содержат файлы, а другие содержат больше подкаталогов.

Как скопировать все дерево?

Ответ 1

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

верьте, что сделаете то, что хотите... (Рекурсивная копия сделана)

Ответ 2

Скопировать содержимое, включая сам каталог.

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

Ответ 3

Вам нужно указать только каталог (без свойства includes):

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

Подробнее см. manual.

Ответ 4

Скопировать содержимое, включая сам каталог.

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

Ответ 5

В примере здесь вы можете написать простой файл 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.

Ответ 6

Точная точка: ant копирует только подкаталоги, если исходные файлы новее, чем файлы назначения. [1] В моем случае субдиры не копировались (я использую verbose = "true" ), поскольку изменений не было и они уже были в пункте назначения. Вы можете использовать "перезаписать", чтобы заставить его, или коснуться некоторых файлов в исходных поддиректорах.

Ответ 7

Я добавляю более общий шаблон для копирования всех подпапок.

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

Подробнее см. Patterns.

Ответ 8

Я использовал теги, как показано ниже в фрагменте кода в файле build.xml, чтобы копировать отдельные файлы 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>

Ответ 9

Другой задачей ant является Copydir. Ключевой частью здесь является включение имени каталога, который вы хотите скопировать после каталога dest. Подкаталоги и файлы будут скопированы автоматически.

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

Ответ 10

Этот код должен скопировать папку, а также ее содержимое. Он также использует задачу 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>

Ответ 11

Я, наконец, скопировал, используя следующий код

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

Это скопирует папку src из dist для сборки.

Надеюсь, это поможет кому-то.