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?
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:
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
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
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
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!