Tôi đã từng copydir
sao chép cây thư mục nhưng nó không được dùng nữa. Thư mục của tôi chứa một số thư mục con và một số trong số đó chứa tệp và những thư mục khác chứa nhiều thư mục con hơn.
Làm thế nào tôi có thể sao chép toàn bộ cây?
Tôi đã từng copydir
sao chép cây thư mục nhưng nó không được dùng nữa. Thư mục của tôi chứa một số thư mục con và một số trong số đó chứa tệp và những thư mục khác chứa nhiều thư mục con hơn.
Làm thế nào tôi có thể sao chép toàn bộ cây?
Câu trả lời:
<copy todir="${dest.dir}" >
<fileset dir="${src.dir}" includes="**"/>
</copy>
tin rằng điều đó sẽ làm được những gì bạn muốn ... (Đã thực hiện xong bản sao đệ quy)
includes
là không cần thiết khi bạn muốn tất cả mọi thứ (xem câu trả lời của thành viên s1n )
Sao chép nội dung bao gồm cả chính thư mục.
<copy todir="${dest.dir}" >
<fileset dir="${src.dir.parent}">
<include name="${src.dir}/**"/>
</fileset>
</copy>
Lưu ý: $ {src.dir} có liên quan đến $ {src.dir.parent} và không phải là một đường dẫn đầy đủ
x.parent
được cho là KHÔNG PHẢI là parent
của x
... -_-
Bạn chỉ nên chỉ định thư mục (không có thuộc tính include):
<copy todir="../new/dir">
<fileset dir="src_dir"/>
</copy>
Xem hướng dẫn để biết thêm chi tiết và ví dụ.
Sao chép nội dung bao gồm cả chính thư mục.
<copy todir="${dest.dir}" >
<fileset dir="${src.dir.parent}" includes="${src.dir}/**"/>
</copy>
Một điểm tốt: ant sẽ chỉ sao chép các thư mục con nếu tệp nguồn mới hơn tệp đích. [1] Trong trường hợp của tôi, các dirs phụ không được sao chép (tôi đang sử dụng verbose = "true"), vì không có thay đổi nào và chúng đã ở đích. Bạn có thể sử dụng "ghi đè" để buộc nó hoặc chạm vào một số tệp trong dirs nguồn của bạn.
Tôi đã sử dụng các thẻ bao gồm như được hiển thị trong đoạn mã bên dưới trong tệp build.xml của mình để sao chép các tệp jar riêng lẻ bên trong một thư mục.
<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>
Từ ví dụ ở đây , bạn có thể viết một tệp Ant đơn giản bằng tác vụ sao chép.
<project name="MyProject" default="copy" basedir=".">
<target name="copy">
<copy todir="./new/dir">
<fileset dir="src_dir"/>
</copy>
</target>
</project>
Điều này sẽ sao chép mọi thứ bên trong src_dir
(ngoại trừ nó) sang new/dir
.
Một nhiệm vụ kiến khác là Copydir . Phần quan trọng ở đây là bao gồm tên của thư mục bạn muốn sao chép sau thư mục đích. Các thư mục con và tệp sẽ được sao chép tự động.
<target name="-post-jar">
<copydir src="config" dest="${dist.dir}/config/"/>
</target>
Mã này sẽ sao chép thư mục cũng như nội dung của nó. Nó cũng sử dụng tác vụ tên cơ sở để tránh phải thực hiện bất kỳ phân tích đường dẫn thủ công nào.
<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>
Cuối cùng tôi đã sao chép bằng cách sử dụng mã sau
<copy todir="${root.dir}/dist/src">
<fileset dir="${root.dir}/build/src" includes="**"/>
</copy>
Thao tác này sẽ sao chép thư mục src từ dist để xây dựng.
Hy vọng điều này sẽ giúp ai đó.