2010-01-27 27 views
17

Tôi có một số tập tin:Chuyển đổi một fileset Ant để nhiều áp args

dir/foo.txt 
dir/bar.txt 
dir/foobar.txt 

Trong một apply nhiệm vụ Ant, tôi muốn vượt qua danh sách các tập tin như các đối số:

<target name="atask"> 
    <apply executable="${cmd}" parallel="false" verbose="true"> 
     <arg value="-in"/> 
     <srcfile/> 
     <arg value="dir/foo.txt"/> 
     <arg value="dir/bar.txt"/> 
     <arg value="dir/foobar.txt"/> 

     <fileset dir="${list.dir}" includes="*.list"/> 
    </apply> 
</target> 

này hoạt động tốt , nhưng điều gì xảy ra nếu tôi muốn chọn danh sách tệp một cách linh hoạt, sử dụng tệp fileset:

<fileset dir="dir" includes="*.txt"/> 

Làm cách nào tôi có thể chuyển đổi tệp này thành các phần tử arg - một phần cho mỗi tệp? Một cái gì đó như:

<arg> 
    <fileset dir="dir" includes="*.txt"/> 
</arg> 

thay vì

<arg value="dir/foo.txt"/> 
<arg value="dir/bar.txt"/> 
<arg value="dir/foobar.txt"/> 

(Ví dụ này không làm việc vì arg không hỗ trợ fileset)

Trả lời

26

Dưới đây là một ví dụ minh họa việc sử dụng của nhiệm vụ pathconvert.

Đường dẫn được chuyển đổi được chuyển đến tệp thực thi bằng cách sử dụng <arg line />.

Điều này giả định không có khoảng trống trong đường dẫn của các tệp *.txt của bạn.

<target name="atask"> 
    <fileset dir="dir" id="myTxts"> 
     <include name="*.txt" /> 
    </fileset> 
    <pathconvert property="cmdTxts" refid="myTxts" pathsep=" " /> 

    <apply executable="${cmd}" parallel="false" verbose="true"> 
     <arg value="-in" /> 
     <srcfile /> 
     <arg line="${cmdTxts}" /> 

     <fileset dir="${list.dir}" includes="*.list" /> 
    </apply> 
</target> 

Nếu bạn có thể gặp các không gian này nên làm: như trên, nhưng thay đổi (hy vọng rõ ràng mà dòng) tới:

<pathconvert property="cmdTxts" refid="myTxts" pathsep="' '" /> 

 <arg line="'${cmdTxts}'"/> 
+0

Tôi nghĩ Đó là không thể trộn nhưng có vẻ như không sao. Đây là một giải pháp tốt đẹp và nó hoạt động (tôi đã không kiểm tra các trường hợp với không gian trong tên). – Jmini

+0

Đã thử nghiệm và hoạt động cho tôi. – ViToni

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