2009-07-19 40 views
5

Tôi đang cố tạo danh sách tệp hoặc thư mục được phân tách bằng dấu phẩy trong thư mục hiện tại. Ví dụ: giả sử tôi có cấu trúc thư mục sau:Tạo danh sách tệp được phân tách bằng dấu phẩy với Ant

 
Root 
-- Directory1 
-- Directory2 
... 

Tôi muốn tạo biến hoặc thuộc tính chứa "Directory1, Directory2". Tôi đã thử iterating (sử dụng ant-contrib "cho" nhiệm vụ) trên một <dirset dir="." includes="*">, nhưng điều này tạo ra đường dẫn tuyệt đối; Sau đó tôi đã trích xuất các tên tệp bằng cách sử dụng tác vụ "tên cơ sở", tuy nhiên điều đó lại tạo ra một sản phẩm thuộc tính. Vì các thuộc tính là không thay đổi, những gì tôi nhận được trong thực tế là "Directory1, Directory1, ..."

Có cách nào thực hiện điều này hay không, hoặc tôi phải viết một phần mở rộng Java để làm điều này cho tôi?

Trả lời

10

Nhiệm vụ pathconvert có thể được sử dụng để định dạng một dirset có dải phân cách tùy tiện:

<dirset id="dirs" dir="." includes="*"/> 
<pathconvert dirsep="/" pathsep="," property="dirs" refid="dirs"/> 
<echo message="${dirs}"/> 
+0

Mất một chút nỗ lực (sử dụng globmapper và một số hack nhỏ khác) và tôi khá chắc chắn bạn đã chuyển dirsep bằng pathsep trong ví dụ của bạn, nhưng bạn đã chỉ cho tôi theo hướng chính xác mà tôi cần. Cảm ơn! –

+0

trông giống như các giá trị 'dirsep' và 'pathsep' được hoán đổi. Tôi nghĩ bạn có nghĩa là dirsep = "/" pathsep = "," – iTake

4

Chỉ cần xác nhận câu trả lời Jörn là chính xác những gì tôi cần thiết (như là một điểm khởi đầu) là tốt.

<dirset id="dirset.sandbox" dir="${sandbox.dir}" includes="*"> 
    <exclude name="output"/> 
</dirset> 
<pathconvert pathsep=" " property="dirs.sandbox" refid="dirset.sandbox"> 
    <mapper type="flatten"/> 
</pathconvert> 
<echo message="[*** the sandbox dir list is ${dirs.sandbox} ***]"/> 

sandbox.dir là đường dẫn tuyệt đối tương tự như/root/build/workspace và chứa một số thư mục con. Đầu ra là danh sách các thư mục được phân cách bằng dấu cách.

Các vấn đề liên quan