2012-03-15 40 views
21

Tôi đang cố gắng để có được tất cả các nội dung trên classpath chính của tôi để có được ghi vào một tập tin bằng cách buildscript Ant của tôi:Làm thế nào để echo biến đường dẫn lớp vào một tập tin

<path id="main.class.path"> 
    <fileset dir="${lib.main.dir}"> 
     <include name="**/*.*"/> 
    </fileset> 
</path> 

Khi tôi di chuột qua main.class.path, Ant/Eclipse ra mắt một tooltip cho thấy các mục trên classpath rằng:

C: \ Users \ myuser \ workbench \ eclipse \ workspace \ myProj \ lib \ chính \ ant-junit-1.6.5.jar

vv (Danh sách thực tế có khoảng 30 JAR trên đó.)

Tôi muốn danh sách này được viết thành một tệp có tên deps.txt trong thư mục dist/ của tôi.

Tôi đang mắc kẹt vì tôi không thể tìm ra cách để làm cho main.class.path một biến Ant, hoặc làm thế nào để ít nhất truy cập nó trong <echo> nhiệm vụ:

<echo file="${dist.dir}/deps.txt" message="${???}"/> 

Am tôi cách-off cơ sở ở đây , hoặc thậm chí từ xa đóng?!?

Và đối với những người bạn ở ngoài đó, thay vì trả lời câu hỏi này, chỉ cần bình luận Tại sao bạn muốn thực hiện việc này?, câu trả lời của tôi rất đơn giản: Tôi chỉ muốn một tệp văn bản nhỏ trong JAR của tôi phục vụ như một lời nhắc trực quan (cho tương lai của tôi) cho những gì phụ thuộc của nó.

Trả lời

30

Hãy thử điều này:

<pathconvert property="expanded.main.class.path" refid="main.class.path"/> 

    <target name="everything"> 
    <echo message="${expanded.main.class.path}" 
      file="${dist.dir}/deps.txt"/> 
    </target> 
13

Đơn giản qua:

<echo file="${dist.dir}/deps.txt">${ant.refid:main.class.path}</echo> 
<!-- or --> 
<echo file="${dist.dir}/deps.txt">${toString:main.class.path}</echo> 

$ {ant.refid: main.class.path} hoặc $ {toString: main.class.path} là một thuộc tính csv chứa tất cả các mục từ đường dẫn của bạn với các tệp fileset lồng nhau (resourcecollections nói chung) được phân tách bằng ';'
thấy Ant Manual Properties and PropertyHelpers
Nếu bạn muốn một tách bạn cần phải sử dụng pathconvert trong đó có một pathsep attribute, ví dụ: cho một dòng mới sau mỗi tập tin trong deps.txt bạn sử dụng pathsep="${line.separator}"

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