2011-09-12 22 views
22

tôi có một dự án có sử dụng một tập tin mẹ antlàm thế nào để gọi một mục tiêu kiến ​​khi trọng các mục tiêu trong một file con

tương tự như sau:

<project name="some-portlet" basedir="." default="deploy"> 
    <import file="../build-common-portlet.xml" /> 
    <target name="test"> 
    <echo message="do foo"/> 
    RUN TEST FROM PARENT HERE 
    </target> 
    </project> 

bây giờ tôi muốn ghi đè lên các thử nghiệm cha mẹ mục tiêu theo cách này:

  • làm một số sao chép các lọ cần
  • chạy mục tiêu thử nghiệm từ các tập tin mẹ

phần đầu tiên là không có vấn đề, nhưng tôi không thấy một cách để gọi kiểm tra từ các tập tin mẹ

tôi muốn các mục tiêu được đặt tên thử nghiệm cũng nên CI mà chỉ đơn giản có thể chạy các mục tiêu thử nghiệm.

có cách nào để gọi thử nghiệm trong ../build-common-portlet.xml không?

Trả lời

24

Cách đơn giản nhất là sử dụng sự phụ thuộc vào kiểm tra của phụ huynh.

Vì điều quan trọng là bạn giữ cho thuộc tính tên <project> đồng bộ với tên tệp của nó (OK, không nói đúng, cần thiết, nhưng cải thiện đáng kể khả năng đọc và bảo trì của tập lệnh).

Vì vậy, trong xây dựng-chung-portlet.xml:

<project 
    name="build-common-portlet" <-- note the name 
    ... 
> 
    <target name="test"> 
    <echo message="Calling parent test target"/> 
    ... 
    </target> 
</project> 

Bằng cách đó bạn chỉ có thể làm:

<project name="some-portlet" basedir="." default="deploy"> 
    <import file="../build-common-portlet.xml" /> 
    <target name="test" 
    depends="build-common-portlet.test" <-- note parent specification 
    > 
    <echo message="do foo"/> 
    RUN TEST FROM PARENT HERE 
    </target> 
</project> 

>> Trong bài trả lời bình luận

Nếu bạn muốn để làm một số công việc trước khi chạy thử nghiệm của cha mẹ, chỉ cần tạo một mục tiêu mới và đặt sự phụ thuộc vào nó trước khi kiểm tra của cha mẹ:

<project name="some-portlet" basedir="." default="deploy"> 
    <import file="../build-common-portlet.xml" /> 

    <target name="copy-jars"> 
    <echo message="copying jars"/> 
    </target> 

    <target name="test" 
    depends=" 
     copy-jars, 
     build-common-portlet.test 
    " 
    /> 
</project> 
+0

điều này sẽ không chạy thử nghiệm gốc trước? trong trường hợp của tôi, điều này sẽ thất bại vì việc sao chép các lọ sẽ không xảy ra. Tôi cũng không muốn sửa đổi phụ huynh bởi vì nhiều hơn dự án này bao gồm các tập tin phụ huynh. (tôi có một giải pháp, ít nhất nó có vẻ như nó, trong câu trả lời sau) – nheid

+0

@nheid. Tôi đã cung cấp mẫu trả lời nhận xét của bạn. –

+0

Tôi thích cách tiếp cận này tốt hơn là gọi mục tiêu cha mẹ một cách rõ ràng! Đã làm cho tôi! –

6

Tôi tìm thấy một giải pháp, sẽ chạy các lệnh của tôi và sau đó gọi kiểm tra từ tệp kiến ​​mẹ. Ghi đè kiểm tra của phụ huynh, sau đó gọi khi kiểm tra của phụ huynh sau khi bạn đã thực hiện "ma thuật" của riêng bạn.

Tất cả các mục tiêu của cha mẹ khác cũng có thể được gọi.

Vì vậy, đối với ai đó không biết tập tin kiến ​​của bạn, cô ấy có thể gọi kiến ​​thử nghiệm theo cách mong đợi.

<project name="some-portlet" basedir="." default="deploy"> 
     <import file="../build-common-portlet.xml" /> 
<target name="test"> 
     <echo message="do foo"/> 
     <ant antfile="../build-common-portlet.xml" target="test"/> 
</target> 
</project> 
+0

Tốt, tôi đang tìm một giải pháp khi tôi không có quyền kiểm soát tệp được nhập và khi nó không có được đặt. – alexandroid

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