2008-08-12 34 views
26

Tôi có một kịch bản xây dựng và là một phần của tập lệnh đó sao chép một tệp jar vào một thư mục, để dễ dàng gọi nó là bình utils. bình utils được xây dựng bởi một kịch bản xây dựng khác ngồi trong một thư mục khác. Những gì im đang cố gắng để có kịch bản xây dựng của tôi chạy kịch bản xây dựng utils để tôi có thể đảm bảo bình utils được cập nhật.Các kịch bản xây dựng Ant, antcall, phụ thuộc, v.v.

Vì vậy, tôi biết tôi cần nhập tệp xây dựng utils.

<import file="../utils/build/build.xml" /> 

Điều này không hoạt động vì nhiệm vụ nhập, không giống như hầu hết các kiến ​​bò khác, không chạy từ basedir, nó chạy từ pwd. Vì vậy, để có được xung quanh mà tôi có Ditty nhỏ này, mà không nhập thành công việc xây dựng tập tin

<property name="baseDirUpOne" location=".." /> 
    <import file="${baseDirUpOne}/utils/build/build.xml" /> 

Bây giờ ive rằng giải quyết vấn đề nhập của tôi, tôi cần phải gọi nhiệm vụ, rõ rằng nên dễ phải:

<antcall target="utils.package" /> 

lưu ý rằng ở trên, utils là tên dự án của ../utils/build/build.xml

vấn đề tôi bây giờ chạy vào đó là cuộc gọi kiến ​​không thực hiện trong. ./utils/build vì vậy những gì tôi cần, và không thể tìm thấy, là một tài sản runat hoặc một cái gì đó tương tự, về cơ bản:

<antcall target="utils.package" runat="../utils/build" /> 

Lý do tôi cần điều này là trong utils tôi xây dựng tập các bước để chọn mã để sao chép vào jar được dựa trên đường dẫn tương đối để tránh hardcoding đường trong tập tin kiến ​​của tôi. Bất kỳ ý tưởng?

Trả lời

33

Tôi đã thiết lập một thiết lập tương tự: Tôi có tệp build.xml chính của Ant, tệp này gọi một tệp build.xml riêng để xử lý các thử nghiệm của tôi. Đây là cách tôi làm điều đó:

<target name="build-tests"> 
    <subant target="build"> 
     <fileset dir="${test.home}" includes="build.xml"/> 
    </subant> 
</target> 

Bí quyết là sử dụng subant thay vì antcall. Bạn không phải nhập tệp xây dựng khác.

+0

Điều gì sẽ xảy ra nếu bạn cần điều chỉnh đường dẫn lớp trong mục tiêu của người dùng phụ? –

6

Hãy thử sử dụng "ant" task thay vì tác vụ "chống thư rác", chạy tác vụ được nhập trực tiếp thay vì nhập nó vào tệp xây dựng hiện tại. Nó có thông số "dir":

thư mục để sử dụng làm cơ sở cho dự án Ant mới. Mặc định là người dựa trên dự án hiện tại, trừ khi kế thừa đã được đặt thành false, trong trường hợp không có giá trị mặc định là . Thao tác này sẽ ghi đè cài đặt dựa trên dự án được gọi.

Vì vậy, bạn có thể làm:

<ant antfile="${baseDirUpOne}/utils/build/build.xml" dir="../utils/build" /> 

hoặc một cái gì đó như thế.

+2

Làm cho

0

Bạn có thể chuyển params xuống antcall bằng cách lồng vào khối antcall. Vì vậy, bạn có thể vượt qua các thuộc tính xuống theo cách đó (có lẽ ngay cả basedir vì các thuộc tính là không thay đổi).

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