2008-12-17 18 views
13

Tệp build.xml có thử nghiệm và một mục tiêu xây dựng. Mục tiêu kiểm tra rõ ràng phụ thuộc vào mục tiêu xây dựng.Ant có đưa ra cách vượt qua sự phụ thuộc không?

Làm cách nào để chỉ chạy mục tiêu thử nghiệm, tạm thời bỏ qua quá trình biên soạn mà không sửa đổi tệp build.xml?

Tôi hỏi vì quá trình biên dịch quá dài và được cập nhật bởi máy chủ tích hợp liên tục; và tôi đang theo đuổi vấn đề với các bài kiểm tra đơn vị.

Trả lời

19

Không, bạn không thể bỏ qua mà không sửa đổi tệp xây dựng.

Đây là những gì tôi làm trong các dự án của mình để giải quyết vấn đề này. Đối với mỗi mục tiêu công khai, tôi sẽ tạo một mục tiêu riêng với "do-" ở phía trước nó. Mục tiêu riêng tư không phụ thuộc và mục tiêu công khai có mục tiêu "làm" là phụ thuộc.

Ví dụ:

<target name="compile" depends="init, do-compile" description="Compiles all of the source code" /> 

<target name="do-compile"> 
     <javac destdir="${classes.dir}" debug="true" encoding="ISO-8859-1"> 
      <src refid="src.path" /> 
      <include name="*.java" /> 
      <classpath refid="external.libraries.classpath" /> 
     </javac> 
</target> 
+1

Có vẻ như chúng tôi làm việc theo cách tương tự - thật tuyệt khi biết tôi không đơn độc ở mặt trận này :) –

4

Cá nhân tôi đã tìm thấy nội dung phụ thuộc trong Ant để không cản trở bạn. Tôi thường thiết lập hai bộ mục tiêu - những mục tiêu thực sự là làm công cụ (không có phụ thuộc) và sau đó nhắm mục tiêu mà chỉ có phụ thuộc. Bằng cách đó bạn có thể dễ dàng chạy một mục tiêu duy nhất, và bạn cũng có thể dễ dàng chạy toàn bộ bộ phần mềm vv. Điều này phù hợp với thực tế sử dụng (thay vì ý thức hệ) trong chế độ xem của tôi.

+0

đẹp lừa, cảm ơn. – philant

0

Chỉ cần "loại bỏ" phụ thuộc tạm thời? "Nếu mã được xây dựng thì tất cả các tệp của bạn sẽ khả dụng, phải không? - oops, chỉ thấy rằng bạn không thể thay đổi tập tin, hmm, tại sao bạn không chạy cùng một công việc tại địa phương đầu tiên?

2

Một mục tiêu xây dựng tốt bằng văn bản sẽ không cần phải xây dựng lại bất cứ điều gì nếu mã không thay đổi. Vì vậy, thực tế là mục tiêu thử nghiệm phụ thuộc vào nó nên phần lớn là không liên quan. Nếu bạn chạy mục tiêu xây dựng hai lần liên tiếp và nó cố gắng xây dựng lại thứ gì đó lần thứ hai, bạn có thể muốn điều tra tại sao nó lại làm điều đó.

Cách đơn giản để tránh thực hiện mục tiêu là đặt thuộc tính "trừ khi" của mục tiêu thành tên của một số thuộc tính. Nếu bạn sau đó đặt thuộc tính này trên dòng lệnh khi chạy Ant, nó sẽ bỏ qua mục tiêu đó.

+0

Đồng ý, nhưng Ant chỉ được sử dụng để khởi động biên dịch dựa trên Makefile của một codebase lớn. – philant

28

Sử dụng thuộc tính unless.

<target name="test" unless="dont.run.tests"> 

Nếu bạn không muốn "test" để chạy, chỉ

kiến ​​-Ddont.run.tests = true

Cần undefined nếu bạn muốn kiểm tra chạy. Ant chỉ kiểm tra xem nó có được xác định hay không. Ngoài ra, có một thuộc tính if thực hiện trò chuyện.

Đây là số article trên cả hai.

+1

Đây là phương pháp chính xác, nên được đánh dấu là câu trả lời đúng –

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