2012-10-02 10 views
5

Tôi cần có được kết quả mục tiêu "phụ thuộc: cây" từ Maven khi bắt đầu giai đoạn "thử nghiệm", để giúp gỡ lỗi một vấn đề mà tôi cần để biết phiên bản nào của mọi thứ đang được sử dụng. Trong Ant nó sẽ được dễ dàng, tôi đã xem xét các tài liệu Maven và nhiều câu trả lời ở đây nhưng vẫn không thể tìm ra nó, chắc chắn nó không phải là khó?Maven chạy "phụ thuộc: cây" khi bắt đầu giai đoạn "thử nghiệm"

+0

Bạn nói rằng bạn muốn 'maven-phụ thuộc-plugin' để chạy' tree' mục tiêu trong giai đoạn 'test'? – maba

Trả lời

5

Nếu bạn muốn chắc chắn rằng dependency:tree đang được chạy vào đầu giai đoạn test thì bạn sẽ phải di chuyển mục tiêu surefire:test gốc để được thực hiện sau dependency:tree. Để làm điều đó, bạn sẽ phải đặt các plugin theo thứ tự chúng sẽ được chạy.

Dưới đây là ví dụ pom.xml hoàn chỉnh bổ sung maven-dependency-plugin trước maven-surefire-plugin. Bản gốc default-test bị tắt và một custom-test mới được thêm vào và cái này sẽ được chạy sau khi thực hiện dependency-tree.

<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.stackoverflow</groupId> 
    <artifactId>Q12687743</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <name>${project.artifactId}-${project.version}</name> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <build> 
     <plugins> 
      <plugin> 
       <artifactId>maven-dependency-plugin</artifactId> 
       <version>2.5.1</version> 
       <executions> 
        <execution> 
         <id>dependency-tree</id> 
         <phase>test</phase> 
         <goals> 
          <goal>tree</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <artifactId>maven-surefire-plugin</artifactId> 
       <version>2.7.2</version> 
       <executions> 
        <execution> 
         <id>default-test</id> 
         <!-- Using phase none will disable the original default-test execution --> 
         <phase>none</phase> 
        </execution> 
        <execution> 
         <id>custom-test</id> 
         <phase>test</phase> 
         <goals> 
          <goal>test</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

Đó là một chút vụng về nhưng đó là cách để vô hiệu hóa hành quyết.

3

Declare này trong POM dự án của bạn:

<plugin> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <version>2.5.1</version> 
    <executions> 
    <execution> 
     <phase>test-compile</phase> 
     <goals> 
     <goal>tree</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

Bạn có thể áp dụng mô hình này để kích hoạt bất kỳ plugin trong một xây dựng giai đoạn cụ thể. Xem http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Plugins.

Xem thêm http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference để biết danh sách các giai đoạn xây dựng. Như maba chỉ ra, bạn cần phải cẩn thận chọn giai đoạn để đảm bảo mục tiêu tree được thực hiện vào đúng thời điểm.

+0

Điều đó sẽ chạy 'phụ thuộc: cây' sau các thử nghiệm thực tế. OP nói rằng anh ta muốn nó chạy lúc bắt đầu giai đoạn thử nghiệm. – maba

+0

Điểm tốt. Thay vào đó, anh ta có thể liên kết với 'test-compile' hoặc thậm chí' compile'. Hy vọng rằng sự hiểu biết các mô hình chung cho các ràng buộc bổ sung cho các giai đoạn sẽ là đủ để giải quyết vấn đề. (Đã chỉnh sửa câu trả lời của tôi). –

+0

+1 để hiển thị cách thêm 'dependency: tree' vào giai đoạn' test'. Tôi sẽ thêm một câu trả lời khác cho bạn thấy làm thế nào để có được 'dependency: tree' để chạy ở đầu giai đoạn' test'. – maba

6

chí này sản lượng cây phụ thuộc kiểm tra:

mvn test dependency:tree -DskipTests=true