Helpex - Trao đổi & giúp đỡ Đăng nhập
146

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.

146 hữu ích 5 bình luận 172k xem chia sẻ
76

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ó sẽ 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.

76 hữu ích 2 bình luận chia sẻ
35

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
35 hữu ích 0 bình luận chia sẻ
12

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 Atạo ra tạo phẩm thứ cấp với trình phân loại testsnơi đặt các lớp kiểm tra và tài nguyên kiểm tra.

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.

12 hữu ích 0 bình luận chia sẻ
7

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

7 hữu ích 0 bình luận chia sẻ
2

Để 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

2 hữu ích 0 bình luận chia sẻ
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 hữu ích 1 bình luận chia sẻ
0

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

0 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ maven , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading