2009-09-07 59 views
10

Tôi đang chạy tác vụ Ant chạy thử nghiệm junit từ bên trong maven, sử dụng maven-antrun-plugin. Lệnh gọi trông giống như sau:Thất bại khi xây dựng maven-antrun-plugin thất bại

<plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <executions> 
    <execution> 
     <id>ant-test</id> 
     <phase>test</phase> 
     <goals> 
     <goal>run</goal> 
     </goals> 
     <configuration> 
     <tasks unless="maven.test.skip"> 
      <ant antfile="${basedir}/build.xml" target="test"> 
      <property name="build.compiler" value="extJavac" /> 
      </ant> 
     </tasks> 
     </configuration> 
    </execution> 
</executions> 
</plugin> 

Khi kiểm tra không thành công, việc xây dựng tiếp tục và báo cáo thành công. Tôi cố gắng để tái tạo hành vi này chỉ với kiến ​​(Ant chạy từ dòng lệnh 'example.xml -f ant'):

<project name="example" basedir="." default="aa"> 
<target name="aa"> 
    <ant antfile="build.xml" target="test" /> 
</target> 
</project> 

nhưng trong trường hợp này tất cả mọi thứ được như mong đợi: thử nghiệm thất bại đầu tiên dừng việc xây dựng và báo cáo nó không thành công. Có vẻ như con quạ có phép thuật nào đó (hoặc gọi con kiến ​​theo cách khác).

Vì vậy, câu hỏi của tôi nếu làm thế nào để đạt được hiệu quả của việc không xây dựng maven khi nhiệm vụ kiểm tra antrun thất bại.

Trả lời

4

Câu hỏi của bạn đặt ra một câu hỏi rõ ràng để đổi lại, tại sao không chỉ sử dụng Maven để chạy JUnit? surefire plugin sẽ thực hiện bất kỳ kiểm tra nào (trong giai đoạn thử nghiệm) được biên dịch trong giai đoạn biên dịch thử thành các lớp đích/thử nghiệm (thường là nội dung của src/test/java). Có JavaWorld article giới thiệu về cách sử dụng Junit với Maven bạn có thể thấy hữu ích

Giả sử bạn có lý do hợp lệ để sử dụng Ant để gọi thử nghiệm, bạn cần đảm bảo rằng Ant được thiết lập không thành công nếu các kiểm tra không hợp lệ. Bạn có thể thực hiện việc này bằng cách định cấu hình JUnit task. Các thuộc tính bạn có thể muốn đặt là haltonerror hoặc haltonfailure. Ngoài ra, bạn có thể đặt thuộc tính về lỗi và không tự xây dựng Ant bằng cách sử dụng thuộc tính failureproperty.


Tôi đã bao gồm hai ví dụ để chứng minh lỗi Ant gây ra lỗi xây dựng Maven. Đầu tiên là lời gọi trực tiếp của tác vụ thất bại, lệnh thứ hai gọi một tác vụ trong tệp build.xml theo cách tương tự như bạn đã làm.

ví dụ nhỏ này cho thấy một sự thất bại kiến ​​sẽ gây ra một Maven xây dựng thất bại:

<plugins> 
    <plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <executions> 
     <execution> 
     <phase>test</phase> 
     <configuration> 
      <tasks> 
      <fail message="Something wrong here."/> 
      </tasks> 
     </configuration> 
     <goals> 
      <goal>run</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 
</plugins> 

[INFO] [antrun:run {execution: default}] 
[INFO] Executing tasks 
[INFO] ------------------------------------------------------------------------ 
[ERROR] BUILD ERROR 
[INFO] ------------------------------------------------------------------------ 
[INFO] An Ant BuildException has occured: Something wrong here. 

Mở rộng ví dụ để sử dụng cuộc gọi ant là bạn có:

<plugins> 
    <plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <executions> 
     <execution> 
     <phase>test</phase> 
     <configuration> 
     <tasks unless="maven.test.skip"> 
      <ant antfile="${basedir}/build.xml" target="test"> 
      <property name="build.compiler" value="extJavac" /> 
      </ant> 
     </tasks> 
     </configuration> 
     <goals> 
      <goal>run</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 
</plugins> 

Với build.xml như:

<?xml version="1.0"?> 
<project name="test" default="test" basedir="."> 
    <target name="test"> 
    <fail message="Something wrong here."/> 
    </target> 
</project> 

Cung cấp lỗi sau:

[INFO] [antrun:run {execution: default}] 
[INFO] Executing tasks 

test: 
[INFO] ------------------------------------------------------------------------ 
[ERROR] BUILD ERROR 
[INFO] ------------------------------------------------------------------------ 
[INFO] An Ant BuildException has occured: The following error occurred while executing this line: 
C:\test\anttest\build.xml:4: Something wrong here. 
+0

Cảm ơn câu trả lời của bạn! Lý do tại sao tôi sử dụng kiến ​​để chạy thử nghiệm là giao diện người dùng của ứng dụng của tôi được thực hiện trong Nền tảng Netbeans. Nền tảng này cung cấp sẵn sàng để sử dụng kiến ​​xây dựng các tập tin, mà tôi không muốn cổng để maven. Một sự khác biệt giữa ví dụ của bạn và những gì tôi trải nghiệm khi chạy mục tiêu xây dựng Nền tảng Netbeans là trong ví dụ của bạn có "BUILD ERROR", trong khi bản dựng nền tảng cung cấp thông báo "BUILD FAILED".Có lẽ maven chạy kiến ​​với cái gì đó giống như nhiệm vụ của junit "haltonerror" nhưng không có "haltonfailure"? –

11

Bạn có thể muốn xem xét các thuộc tính failonerror cho antrun:

<exec executable="python" dir="${project.root}/modules" failonerror="true"></exec> 

Reference.

+0

Năm sau ... Tôi có thể RTFM, cảm ơn bạn :-) (cũng được ghi trong tài liệu kiến ​​tiêu chuẩn https://ant.apache.org/manual/Tasks/exec.html) – Gunnar