Maven bỏ qua bài kiểm tra


225

Tôi đang sử dụng Maven 2.2.1 và để xây dựng dự án của mình, tôi đã sử dụng lệnh này

mvn clean install -Dmaven.test.skip=true

Tuy nhiên, bản dựng thất bại nói rằng nó không thể tìm thấy một trong những cổ vật. Tuy nhiên, khi tôi sử dụng:

mvn clean install -DskipTests

mọi thứ hoạt động tốt

Cho đến nay tôi đã nghĩ rằng 2 lệnh này là tương đương. Tuy nhiên, liên kết này dường như gợi ý rằng -Dmaven.test.skip=truecũng bỏ qua việc biên dịch các trường hợp thử nghiệm.

Tuy nhiên, điều đó vẫn không giải thích cho tôi tại sao một lệnh hoạt động và một lệnh khác thì không. Sẽ biết ơn nếu có ai giải thích điều này cho tôi.


1
Phiên bản nào của maven-Surefire-plugin bạn đang sử dụng? Có giống như phiên bản doc bạn đang đọc không?
gerrytan

2
Một tòa nhà bỏ qua, cái khác bỏ qua chạy. Nếu bạn muốn cả hai sử dụng cả hai.
Elliott Frisch

1
Bạn có thể cung cấp chi tiết về sự thất bại - thông báo lỗi hoặc stacktrace không?
Raghuram

1
Tại sao bạn sử dụng phiên bản Maven cũ hơn đã được xác định EoL .
khmarbaise

1
Vì vậy, có thực sự đúng là để bỏ qua hoàn toàn mọi thử nghiệm liên quan tôi phải sử dụng -Dmaven.test.skip=true -DskipTests? Người này hay người kia đôi khi có thể bị bỏ qua, tùy thuộc vào hoàn cảnh, nhưng ai muốn nghĩ về điều đó ..
Landon Kuhn

Câu trả lời:


120

Như bạn đã lưu ý, -Dmaven.test.skip=truebỏ qua việc biên dịch các bài kiểm tra. Hơn nữa, nó bỏ qua việc xây dựng các tạo tác thử nghiệm. Một thực tế phổ biến cho các dự án lớn là có các tiện ích thử nghiệm và các lớp cơ sở được chia sẻ giữa các mô-đun trong cùng một dự án.

Điều này được thực hiện bằng cách có một mô-đun yêu cầu một test-jarmô-đun được xây dựng trước đó:

<dependency>
  <groupId>org.myproject.mygroup</groupId>
  <artifactId>common</artifactId>
  <version>1.0</version>
  <type>test-jar</type>
  <scope>test</scope>
</dependency>

Nếu -Dmaven.test.skip=true(hoặc đơn giản -Dmaven.test.skip) được chỉ định, test-jars không được xây dựng và bất kỳ mô-đun nào dựa vào chúng sẽ thất bại trong quá trình xây dựng.

Ngược lại, khi bạn sử dụng -DskipTests, Maven không chạy thử nghiệm, nhưng nó biên dịch chúng và xây dựng jar thử nghiệm, làm cho nó có sẵn cho các mô-đun tiếp theo.


2
Làm thế nào để giải quyết vấn đề này? Như lệnh maven trực tuyến của tôi sử dụng -Dmaven.test.skip.
neptune

2
@neptune có vấn đề gì? Nếu bạn có một câu hỏi mới, xin vui lòng sử dụng một bài viết mới để hỏi nó.
Mureinik

58

Tôi đã có một số phụ thuộc lẫn nhau với các thử nghiệm để xây dựng gói.

Lệnh sau quản lý để ghi đè sự cần thiết của tạo phẩm thử nghiệm để hoàn thành mục tiêu:

mvn -DskipTests=true  package

29

Có một sự khác biệt giữa mỗi tham số.

  • -DskipTests bỏ qua giai đoạn chạy thử nghiệm, điều đó có nghĩa là vào cuối quá trình này, bạn sẽ có các bài kiểm tra được biên dịch.

  • -Dmaven.test.skip = bỏ qua giai đoạn biên dịch và chạy thử nghiệm thực sự.

Như tham số -Dmaven.test.skip = biên dịch bỏ qua đúng, bạn không có các tạo phẩm thử nghiệm.

Để biết thêm thông tin, chỉ cần đọc tài liệu lướt sóng: http://maven.apache.org/plugins-archives/maven-surefire-plugin-2.12.4/examples/skipping-test.html


15

Tôi có thể cho bạn một ví dụ dẫn đến cùng một vấn đề, nhưng nó có thể không cung cấp cho bạn câu trả lời cho câu hỏi của bạn. (Ngoài ra, trong ví dụ này, tôi đang sử dụng kiến ​​thức Maven 3 của mình, có thể không áp dụng cho Maven 2.)

Trong một dự án maven đa mô-đun (chứa các module AB, nơi Bphụ thuộc vào A), bạn cũng có thể thêm một sự phụ thuộc kiểm tra về Atừ B.

Sự phụ thuộc này có thể trông như sau:

<dependency>
     <groupId>com.foo</groupId>
     <artifactId>A</artifactId>
     <type>test-jar</type> <!-- I'm not sure if there is such a thing in Maven 2, but there is definitely a way to achieve such dependency in Maven 2. -->
     <scope>test</scope>
</dependency>

(để biết thêm thông tin tham khảo https://maven.apache.org/guides/mini/guide-attached-tests.html )
Lưu ý rằng dự án Asản xuất vật thứ cấp với một phân loại testsnơi các lớp học thử nghiệm và nguồn lực thử nghiệm được đặt.

Nếu bạn xây dựng dự án của mình -Dmaven.test.skip=true, bạn sẽ gặp lỗi giải quyết phụ thuộc miễn là tạo phẩm thử nghiệm không được tìm thấy trong kho lưu trữ cục bộ hoặc kho lưu trữ bên ngoài. Lý do là các lớp kiểm tra không được biên dịch cũng như teststạo tác được tạo ra.
Tuy nhiên, nếu bạn chạy bản dựng của mình với tạo phẩm -DskipTestscủa bạn testssẽ được tạo ra (mặc dù các thử nghiệm sẽ không chạy) và sự phụ thuộc sẽ được giải quyết.


10

Để bỏ qua trường hợp thử nghiệm trong quá trình cài đặt sạch maven, tôi đã sử dụng tham số -DskipTests trong lệnh sau

mvn clean install -DskipTests

vào cửa sổ đầu cuối


9

Tham số -DskipTests có thể không hoạt động tùy thuộc vào phiên bản plugin chắc chắn của bạn.

Bạn có thể sử dụng "-Dmaven.test.skip.exec" thay vì "-DskipTests"

Nguồn: Chi tiết tham số Surefire


1

Trong quá trình biên dịch maven, bạn có thể bỏ qua việc thực hiện kiểm tra bằng cách thêm plugin sau vào pom.xml

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.20.1</version>
    <configuration>
         <skipTests>true</skipTests>
    </configuration>
</plugin>

1
Nó bỏ qua các bài kiểm tra ngay cả khi bạn thực hiệnmvn test
Pratik Singhal
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.