Maven: bagaimana cara membangun paralel?

152

Ketika Anda membangun dengan pakar pada mesin multicore / multi-CPU, sering kali memungkinkan untuk membangun berbagai sub proyek secara paralel. Apakah ada cara untuk melakukan ini dengan pakar? Apakah ada plugin untuk ini / apa pun?

Hans-Peter Störr
sumber

Jawaban:

228

Maven 3 (per beta 1) sekarang mendukung build paralel sebagai fitur eksperimental.

Sebagai contoh,

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

Dokumentasi lengkap dapat ditemukan di wiki Maven.

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

hallidave
sumber
5
Apa artinya 1,5 utas? Jika saya memiliki sistem inti tunggal, apakah itu berarti 1 utas, tetapi sistem inti ganda menghasilkan 3 utas?
Saad Malik
4
@ SaadMalik Ya, tepatnya, 3 utas pada inti ganda, 6 utas pada sistem quad core, dll.
t0r0X
Apakah ada argumen yang bisa kita gunakan untuk JVM, jadi kita bisa menggunakan ini dalam gerhana?
Jason Huntley
Dukungan Eclipse tidak memanggil pakar eksternal.
Thorbjørn Ravn Andersen
18

Solusi yang disarankan bagus tetapi saya ingin menambahkan sesuatu ke jawaban di sini mengenai stabilitas tes selama pembuatan paralel .

Jadi, ketika build paralel Maven digunakan:

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

Beberapa masalah dengan tes dapat muncul. Catat setiap perilaku dalam tes yang berbeda antara eksekusi tes serial dan paralel. Sebagian besar waktu itu terjadi lakukan untuk tidak tepat uji isolasi sumber daya .

Misalnya, test1 memanipulasi entri db dengan kunci 12345, yang merupakan hardcode dan test2 menggunakan entri yang sama! Itu tidak baik ...

Ini adalah situasi yang harus dipertimbangkan di tempat pertama, tetapi kadang-kadang itu dilupakan dan dapat menyebabkan masalah yang berbeda begitu beralih ke pembuatan parabola paralel dibuat.

Jika itu terjadi, dan Anda masih ingin menggunakan eksekusi paralel setidaknya dalam beberapa kesempatan, Anda dapat (tentu saja, selain mencoba memperbaiki tes dan membuatnya terisolasi dengan benar) untuk menonaktifkan berjalannya tes Maven menggunakan argumen -Dskipest:

mvn clean install -T 4 -DskipTests
Johnny
sumber
12

Beberapa aplikasi membangun CI (misalnya hudson) dapat membangun beberapa proyek pakar sekaligus (dan bahkan pada beberapa mesin).

Dukungan untuk ini dalam 'standalone' pakar juga akan bagus, sekilas melihat melalui pelacak isu pakar memberi saya: http://jira.codehaus.org/browse/MNG-3004

jor
sumber
Saya pikir fungsi Hudson untuk beberapa proyek pakar sekaligus rusak seperti yang ditunjukkan dalam komentar MNG-3004 JIRA.
Dougnukem
2

Jika Anda datang ke pertanyaan ini mencari untuk memilah-milah server build Anda dan Anda tidak menggunakan yang berhubungan dengan maven secara native flag ajaib yang Anda cari adalah ini:

-Dmaven.repo.local=someNoneGlobalDir

lakukan itu untuk masing-masing bangunan Anda dan Anda dapat membiarkan mereka menjalankan semua pada saat yang sama daripada memiliki semua yang menggunakan pakar dalam antrian!

JonnyRaa
sumber