2011-08-08 27 views
14

Có khả năng ghi đè lên mục tiêu hoặc mô phỏng bằng cách nào đó bằng cách nào đó không?Mục tiêu ghi đè trong Ant

Vì vậy, khi tôi gọi

<target perform-after="release"> 
    <do-something /> 
</target> 

Nó sẽ hoạt động như thế này:

<target name="release"> 
    <antcall target="release" /> <!-- call previous version, not recursion --> 
    <do-something /> 
</target> 

tôi nghĩ rằng nó có một ý nghĩa, tôi sẽ mô tả trên ví dụ Android:

Chúng tôi có một mẫu .xml cho mỗi build.xml trong thư mục SDK ({$SDK}/tools/ant/*.xml), các tệp này được bao gồm trong mỗi lần tạo build.xml cho eac h dự án. Chỉ có các mục tiêu -pre-compile, -pre-build-post-compile mục tiêu trống và dễ ghi đè. Nhưng ví dụ, không có mục tiêu rỗng -post-release. Google đề xuất trong các ý tưởng được tạo ra build.xml chỉ để sao chép-dán mục tiêu vào số build.xml của riêng tôi và sau đó điều chỉnh nó. Nhưng tôi nghĩ nó không ổn, bởi vì nếu Google sẽ thay đổi một cái gì đó trong mục tiêu này bên trong một mẫu, tôi sẽ không bao giờ biết về tôi đang sử dụng phiên bản lỗi thời.

Trả lời

24

Xem phần "Ghi đè mục tiêu" của tác vụ import hoặc mục "Viết lại mục tiêu" của tác vụ include. Tóm lại, hãy cho build.xml chung một tên dự án như "common", và sau đó sử dụng "common.release" trong antcall.

Tôi sẽ lưu ý rằng antcall không hoàn toàn giống nhau vì nó bắt đầu một dự án mới khi chạy, có nghĩa là các biến được đặt bởi đích sẽ không hiển thị sau này. Tôi không có sẵn Ant trên máy này để kiểm tra, nhưng bạn có thể thử một cái gì đó như thế này để tránh antcall:

<target name="release" depends="common.release, -post-release"/> 
+1

Mát mẻ, đó là điều tôi muốn và không ai trả lời tôi) Cảm ơn bạn ! –

+1

Và nó hoạt động, tôi xác nhận. –

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