2009-07-21 33 views
7

Tôi có một tệp common.xml chung chứa một số mục tiêu chung nant được sử dụng lại trong nhiều bản dựng. Những gì tôi muốn làm là 'ghi đè lên' một số mục tiêu nant này và bao gồm các bước bổ sung trước hoặc sau khi mục tiêu hiện tại được thực hiện.Có thể ghi đè lên các mục tiêu nant từ tệp buildfile được bao gồm không?

Mục tiêu nant được sử dụng từ tệp hiện tại trước? I E. Nếu tôi tạo ra một mục tiêu nant trong buildfile hiện tại với cùng tên như một mục tiêu trong một tập tin bao gồm hiện một trong những nhận được gọi là và bao gồm một bỏ qua? Nếu đó là trường hợp tôi chỉ có thể làm và gọi mục tiêu bao gồm nhưng nó sẽ có vẻ như sau đó đó sẽ là một cuộc gọi đệ quy thay vì sau đó đến một nhiệm vụ bao gồm.

Suy nghĩ?

Trả lời

2

Không, tôi đã thử nó cho bạn, vì tôi có một thiết lập tương tự, trong đó tôi có tất cả các mục tiêu xây dựng chúng tôi sử dụng trong commonFile.build và sau đó sử dụng mã sau để đưa nó vào ...

<include buildfile="../commonFile.build"/> 

trong newFile.build của tôi (trong đó bao gồm các commonFile.build ở phía trên cùng của tập tin), tôi đã thêm một mục tiêu mới có tên gọi 'xây dựng', vì nó tồn tại trong commonFile, và đây là thông báo lỗi bạn nhận được phản hồi ...

BUILD FAILED

Mục tiêu trùng lặp có tên 'build'!

Ý tưởng hay, có lẽ là nguyên tắc của OO, nhưng thật đáng tiếc là nó không hoạt động.

Bất kỳ điều gì tốt?

3

Tôi đã có cùng một câu hỏi (và tìm thấy cùng một kết quả), nhưng tôi cũng tìm thấy giải pháp thay thế. Cho phép tôi minh họa bằng một ví dụ.

Bạn có ProjectFile.build và CommonFile.build. Giả sử bạn muốn ghi đè mục tiêu có tên "Sạch".

Bạn sẽ cần phải tạo một tập tin mới (gọi nó là CommonFile_Clean.build), trong đó có:

<?xml version="1.0"?> 
<project> 
    <target name="Clean"> 
     <echo message="Do clean stuff here" /> 
    </target> 
</project> 

Trong CommonFile.build, bạn có điều kiện bao gồm CommonFile_Clean.build:

<?xml version="1.0"?> 
<project> 
    <echo message="checking Clean definition..." /> 
    <if test="${not target::exists('Clean')}"> 
      <echo message="Clean target not defined." /> 
     <include buildfile="CommonFile_Clean.build" />  
    </if> 
</project> 

Trong ProjectFile .build, bạn có thể xác định mục tiêu Clean (trong trường hợp CommonFile_Clean.build sẽ không được sử dụng) hoặc sử dụng việc cài đặt mặc định như được định nghĩa trong CommonFile_Clean.build.

Tất nhiên, nếu bạn có một số lượng lớn mục tiêu, điều này sẽ khá nhiều công việc.

Hy vọng điều đó sẽ hữu ích.

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