2010-02-03 36 views
7

Tôi có một kịch bản xây dựng chính gọi các mục tiêu khác nhau. Một trong những mục tiêu này cần lưu trữ một giá trị và một mục tiêu khác cần hiển thị nó. Rõ ràng điều này là không làm việc vì vậy tôi nghĩ rằng nó có thể liên quan đến phạm vi. Tôi đã thử var, property, và khai báo thuộc tính bên ngoài target1. Vì var dường như có thể thay đổi, có vẻ như tôi cần phải sử dụng nó thay vào đó, nhưng mỗi lần đầu ra của tôi trống.Ant var và phạm vi tài sản

kịch bản chính

<antcall target="target1"/> 
<antcall target="display"/> 

Trong target1:

<var name="myVar" value="${anotherVar}"/> 

Trong display:

<echo>${myVar}</echo> 

Trả lời

4

antcall sẽ bắt đầu mục tiêu kiến ​​trong một dự án mới và sẽ không ảnh hưởng đến dự án chính bằng mọi cách. Hãy thử runtarget từ antcontrib để chạy các mục tiêu trong cùng một dự án.

+0

+1: Cảm ơn bạn đã gợi ý này. Với 'runtarget' tôi đã có thể dọn dẹp các tệp xây dựng của mình một cách dễ dàng. – tangens

2

Bạn có thể gọi nhiều mục tiêu với một yếu tố antcall. Những mục tiêu này sau đó sẽ chia sẻ một cá thể dự án đơn bao gồm các thuộc tính được xác định. Để thực hiện việc này, hãy chỉ định các mục tiêu là các phần tử lồng nhau như sau:

<antcall> 
    <target name="target1"/> 
    <target name="display"/> 
</antcall> 
+0

Ý tưởng thú vị. Tôi có các cuộc gọi đích khác giữa hai người này. Tôi có thể thêm tất cả chúng vào đó, nhưng sau đó tôi sẽ có cùng một vấn đề về phạm vi/bảo mật nếu tôi thay đổi tất cả chúng thành runtarget. Nhưng một trong hai cách nó là một sự cân bằng. – bobtheowl2

+0

Điều này chỉ được hỗ trợ từ Ant 1.6.3, nếu không bạn sẽ thấy: "Nhiệm vụ không hỗ trợ phần tử" target "lồng nhau." –

+0

điều này không chia sẻ tài sản giữa hai mục tiêu. – pstanton

2

Một tùy chọn khác mà tôi tìm thấy là antcallback và có vẻ như hoạt động. Điều này giới hạn những gì được trả về chỉ là một danh sách các giá trị cụ thể, vốn có vẻ an toàn hơn việc mở rộng phạm vi của toàn bộ đích (vì nó đặt, tạo, sửa đổi nhiều var và các thuộc tính).

<antcallback target="target1" return="myVar"/> 
<antcall target="display"/> 

Tôi nghĩ tất cả những giải pháp này là hợp lệ, nó chỉ phụ thuộc vào cấp độ bạn muốn thay đổi phạm vi biến.

4

Bạn có thực sự cần sử dụng <antcall>? Thay vào đó, bạn có thể sử dụng phụ thuộc mục tiêu không?

Như bạn nghi ngờ, sử dụng <antcall> về cơ bản tạo phạm vi mới.

+0

Hiện tại chúng tôi có một mớ hỗn độn phụ thuộc và cố gắng hợp thành các mục tiêu được chia sẻ của chúng tôi để xóa mọi phụ thuộc bên trong và thực hiện một số dọn dẹp trong khi ở đó. – bobtheowl2

+0

Thường thì được sử dụng vì các thẻ lồng nhau . –

0
<antcall target="display"> 
    <param name="param1" value="anything" /> 
</antcall> 

đặt mã trên vào target1 của bạn. Tôi chắc chắn bạn sẽ có thể truy cập param1 của bạn trong hiển thị ngay bây giờ.

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