2009-05-04 28 views
7

Tôi có một dự án với nhiều mô đun, mỗi mô-đun trong thư mục riêng của nó. Mỗi mô-đun có tệp xây dựng kiến ​​riêng (build.xml)Vượt mục tiêu ant tới nhiều tệp build.xml trong các thư mục con

Trong thư mục gốc, tôi đã thiết lập tệp xây dựng chung gọi tệp xây dựng của mỗi mô-đun theo đúng thứ tự.

<?xml version="1.0"?> 
<project name="bridgedb" default="all" basedir="."> 
    <target name="all"> 
    <ant dir="corelib"/> 
    <ant dir="tools"/> 
    <ant dir="makeGdb"/> 
    <ant dir="cytoscape-plugin"/> 
    </target> 
</project> 

Bây giờ mỗi mô-đun cũng có một "sạch" mục tiêu, vì vậy tôi thêm những dòng này:

<target name="clean"> 
    <ant dir="corelib" target="clean"/> 
    <ant dir="tools" target="clean"/> 
    <ant dir="makeGdb" target="clean"/> 
    <ant dir="cytoscape-plugin" target="clean"/> 
    </target> 

Và có mục tiêu nhiều như thế. Có cách nào để viết lại tệp xây dựng để tránh trùng lặp này không? Tôi đã tìm một thuộc tính tích hợp có chứa mục tiêu hoạt động, nhưng tôi không thể tìm thấy nó.

Trả lời

7

Tại sao không sử dụng antcall để gọi mục tiêu tham chiếu đến tất cả các subdir của bạn và tham số mục tiêu được gọi. ví dụ.

<antcall target="doStuffToSubdirs"> 
    <!-- let's clean --> 
    <param name="param1" value="clean"/> 
    </antcall> 

và sau đó:

<target name="doStuffToSubdirs"> 
    <ant dir="corelib" target="${param1}"/> 
    <ant dir="tools" target="${param1}"/> 
    ...etc 
</target> 

vì vậy đây cho phép bạn parameterise các cuộc gọi đến subdirs của bạn. Nếu bạn thêm một subdir mới, bạn chỉ cần thêm subdir đó vào mục tiêu 'doStuffToSubdirs' (tôi cũng sẽ đổi tên nó!)

+0

Yup hoạt động, cảm ơn. – amarillion

+0

mặc dù nó phải là amarillion

+0

Tôi sẽ sửa lại ngay bây giờ. Thx cho người đứng đầu lên (tôi thú nhận tôi đã không kiểm tra rằng :-) –

2

Đặt một mục tiêu sạch trong commonbuild.xml của bạn và trong con tập tin chỉ nhập build.xml cha mẹ của bạn

<import file="${parent.dir}/commonbuild.xml" /> 

Bây giờ bạn sẽ có thể gọi điện cho mục tiêu sạch trong con bạn xây dựng. Bạn cũng có thể ghi đè lên mục tiêu này bằng cách tạo ra một mục tiêu sạch sẽ trong bất kỳ con bạn xây dựng.

+0

Nếu tôi hiểu điều này một cách chính xác, giả định rằng mục tiêu "sạch" thực hiện giống hệt nhau điều trong mỗi thư mục con. Nhưng đó không phải là trường hợp, đặc biệt là không cho các mục tiêu khác mà tôi có thể muốn gọi theo cùng một cách. – amarillion

+0

Bạn đúng, tôi đã hiểu nhầm câu hỏi của bạn. –

+0

np, đây cũng là một mẹo hữu ích mà tôi có thể sử dụng một số ngày khác :) – amarillion

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