Maven: làm thế nào để xây dựng song song?


152

Khi bạn xây dựng với maven trên máy đa lõi / đa CPU, thường có thể xây dựng các dự án con khác nhau song song. Có cách nào để làm điều này với maven không? Có một plugin cho cái này / cái gì không?

Câu trả lời:


228

Maven 3 (kể từ phiên bản beta 1) hiện hỗ trợ các bản dựng song song như một tính năng thử nghiệm.

Ví dụ,

mvn -T 4 clean install # Builds with 4 threads
mvn -T 1C clean install # 1 thread per cpu core
mvn -T 1.5C clean install # 1.5 thread per cpu core

Tài liệu đầy đủ có thể được tìm thấy trên wiki Maven.

https://cwiki.apache.org/confluence/display/MAVEN/Parallel+builds+in+Maven+3


5
Không gì 1,5 đề nghĩa là gì? Nếu tôi có một hệ thống lõi đơn, điều đó có nghĩa là 1 luồng, nhưng hệ thống lõi kép dẫn đến 3 luồng?
Saad Malik

4
@SaadMalik Vâng, chính xác, 3 luồng trên lõi kép, 6 luồng trên hệ thống lõi tứ, v.v.
t0r0X

Có một đối số chúng ta có thể sử dụng cho JVM, vì vậy chúng ta có thể sử dụng điều này trong nhật thực?
Jason Huntley

Hỗ trợ Eclipse không gọi maven bên ngoài.
Thorbjørn Ravn Andersen

18

Các giải pháp được đề xuất là tuyệt vời nhưng tôi muốn thêm một cái gì đó vào câu trả lời ở đây liên quan đến sự ổn định thử nghiệm trong các bản dựng song song .

Vì vậy, khi xây dựng song song Maven được sử dụng:

mvn -T 4 clean install # Builds with 4 threads
mvn -T 1C clean install # 1 thread per cpu core
mvn -T 1.5C clean install # 1.5 thread per cpu core

Một số vấn đề với các bài kiểm tra có thể xuất hiện. Lưu ý bất kỳ hành vi nào trong các thử nghiệm khác nhau giữa thực hiện thử nghiệm nối tiếp và song song. Hầu hết các lần nó xảy ra để kiểm tra tài nguyên cách ly không khôn ngoan .

Ví dụ, test1 thao tác mục nhập db với khóa 12345, được mã hóa cứng và test2 sử dụng cùng một mục! Nó không thể tốt được ...

Đó là một tình huống nên được xem xét ngay từ đầu, nhưng đôi khi nó bị lãng quên và có thể dẫn đến các vấn đề khác nhau sau khi chuyển sang xây dựng maven song song được thực hiện.

Trong trường hợp xảy ra và bạn vẫn muốn sử dụng thực thi song song ít nhất trong một số trường hợp, bạn có thể (tất nhiên, ngoài việc cố gắng sửa bài kiểm tra và làm cho chúng cách ly đúng cách) để vô hiệu hóa chạy thử Maven bằng cách sử dụng đối số -DskipTests:

mvn clean install -T 4 -DskipTests


12

Một số ứng dụng xây dựng CI (ví dụ: hudson) có thể xây dựng nhiều dự án maven cùng một lúc (và thậm chí trên nhiều máy).

Hỗ trợ cho điều này trong maven 'độc lập' cũng sẽ rất tuyệt, một cái nhìn nhanh qua trình theo dõi vấn đề maven đã cho tôi: http://jira.codehaus.org/browse/MNG-3004


Tôi nghĩ rằng chức năng Hudson cho nhiều dự án maven cùng một lúc bị phá vỡ như được chỉ ra trong các bình luận MNG-3004 JIRA.
Dougnukem

2

Nếu bạn đến với câu hỏi này đang tìm cách sắp xếp máy chủ xây dựng của bạn và bạn không sử dụng máy chủ liên quan đến maven, thì cờ ma thuật mà bạn đang tìm kiếm là:

-Dmaven.repo.local=someNoneGlobalDir

làm điều đó cho mỗi bản dựng của bạn và bạn có thể cho phép chúng chạy tất cả cùng một lúc thay vì có mọi thứ sử dụng maven trong hàng đợi!

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.