Maven: วิธีการสร้างแบบขนาน?


152

เมื่อคุณสร้างด้วย maven บนเครื่องมัลติคอร์ / มัลติซีพียูมันมักจะเป็นไปได้ที่จะสร้างโครงการย่อยที่แตกต่างกันในแบบคู่ขนาน มีวิธีทำกับ maven หรือไม่? มีปลั๊กอินสำหรับสิ่งนี้ / อะไร?

คำตอบ:


228

Maven 3 (ตั้งแต่เบต้า 1) รองรับการสร้างแบบขนานเป็นคุณลักษณะทดลอง

ตัวอย่างเช่น,

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

เอกสารฉบับเต็มสามารถพบได้ใน Maven wiki

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


5
อะไร1.5หัวข้อหมายความว่าอย่างไร ถ้าฉันมีระบบแกนเดียวนั่นหมายความว่า 1 เธรด แต่ระบบดูอัลคอร์ให้ผลลัพธ์เป็น 3 เธรดหรือไม่?
Saad Malik

4
@ SaadMalik ใช่แน่นอน 3 เธรดบนดูอัลคอร์ 6 เธรดในระบบคอร์คอร์ ฯลฯ
t0r0X

มีข้อโต้แย้งที่เราสามารถใช้สำหรับ JVM ได้หรือไม่ดังนั้นเราจึงสามารถใช้สิ่งนี้ใน eclipse ได้หรือไม่?
Jason Huntley

การสนับสนุน Eclipse ไม่เรียกใช้ maven ภายนอก
Thorbjørn Ravn Andersen

18

การแก้ปัญหาที่ดี แต่ผมอยากจะเพิ่มสิ่งที่คำตอบที่นี่เกี่ยวกับความมั่นคงในระหว่างการทดสอบคู่ขนานสร้าง

ดังนั้นเมื่อใช้การสร้างแบบขนาน Maven :

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

ปัญหาบางอย่างเกี่ยวกับการทดสอบอาจปรากฏขึ้น สังเกตพฤติกรรมใด ๆ ในการทดสอบที่แตกต่างระหว่างการดำเนินการทดสอบแบบอนุกรมและแบบขนาน ส่วนใหญ่เวลาที่เกิดขึ้นทำเพื่อแยกการทดสอบทรัพยากรที่ไม่เหมาะสม

ตัวอย่างเช่น test1 จัดการรายการ db ด้วยคีย์ 12345 ซึ่งเป็นฮาร์ดโค้ดและ test2 ใช้รายการเดียวกัน! มันไม่ดีเลย ...

มันเป็นสถานการณ์ที่ควรพิจารณาในตอนแรก แต่บางครั้งมันก็ถูกลืมและอาจนำไปสู่ปัญหาที่แตกต่างกันเมื่อมีการสร้างสวิตช์ไปที่ maven ขนาน

ในกรณีที่เกิดขึ้นและคุณยังต้องการใช้การประมวลผลแบบขนานอย่างน้อยในบางโอกาสคุณสามารถ (แน่นอนนอกเหนือจากการพยายามแก้ไขการทดสอบและแยกให้ถูกต้อง) เพื่อปิดการทดสอบ Mavenโดยใช้อาร์กิวเมนต์ -DskipTests:

mvn clean install -T 4 -DskipTests


12

CI build บางแอ็พพลิเคชัน (เช่น hudson) สามารถสร้างโครงการ maven จำนวนมากในเวลาเดียวกัน (และแม้แต่ในหลายเครื่อง)

การสนับสนุนสิ่งนี้ใน maven 'สแตนด์อะโลน' ก็จะดีดูอย่างรวดเร็วผ่านการติดตามปัญหา Maven ให้ฉัน: http://jira.codehaus.org/browse/MNG-3004


ฉันคิดว่าฟังก์ชั่นฮัดสันสำหรับโครงการ maven หลายรายการในเวลาเดียวกันขาดตามที่ระบุไว้ในความคิดเห็น JIRA MNG-3004
Dougnukem

2

หากคุณมาที่คำถามนี้เพื่อค้นหาเซิร์ฟเวอร์การสร้างของคุณและคุณไม่ได้ใช้เซิร์ฟเวอร์ที่จัดการกับ maven ซึ่งเป็นสถานะเวทย์มนตร์ที่คุณกำลังค้นหาอยู่:

-Dmaven.repo.local=someNoneGlobalDir

ทำเช่นนั้นสำหรับงานสร้างแต่ละรายการของคุณและคุณสามารถปล่อยให้พวกเขาทำงานทั้งหมดในเวลาเดียวกันแทนที่จะมีทุกสิ่งที่ใช้ maven ในคิว!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.