เมื่อคุณสร้างด้วย maven บนเครื่องมัลติคอร์ / มัลติซีพียูมันมักจะเป็นไปได้ที่จะสร้างโครงการย่อยที่แตกต่างกันในแบบคู่ขนาน มีวิธีทำกับ maven หรือไม่? มีปลั๊กอินสำหรับสิ่งนี้ / อะไร?
เมื่อคุณสร้างด้วย maven บนเครื่องมัลติคอร์ / มัลติซีพียูมันมักจะเป็นไปได้ที่จะสร้างโครงการย่อยที่แตกต่างกันในแบบคู่ขนาน มีวิธีทำกับ maven หรือไม่? มีปลั๊กอินสำหรับสิ่งนี้ / อะไร?
คำตอบ:
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
การแก้ปัญหาที่ดี แต่ผมอยากจะเพิ่มสิ่งที่คำตอบที่นี่เกี่ยวกับความมั่นคงในระหว่างการทดสอบคู่ขนานสร้าง
ดังนั้นเมื่อใช้การสร้างแบบขนาน 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
CI build บางแอ็พพลิเคชัน (เช่น hudson) สามารถสร้างโครงการ maven จำนวนมากในเวลาเดียวกัน (และแม้แต่ในหลายเครื่อง)
การสนับสนุนสิ่งนี้ใน maven 'สแตนด์อะโลน' ก็จะดีดูอย่างรวดเร็วผ่านการติดตามปัญหา Maven ให้ฉัน: http://jira.codehaus.org/browse/MNG-3004
หากคุณมาที่คำถามนี้เพื่อค้นหาเซิร์ฟเวอร์การสร้างของคุณและคุณไม่ได้ใช้เซิร์ฟเวอร์ที่จัดการกับ maven ซึ่งเป็นสถานะเวทย์มนตร์ที่คุณกำลังค้นหาอยู่:
-Dmaven.repo.local=someNoneGlobalDir
ทำเช่นนั้นสำหรับงานสร้างแต่ละรายการของคุณและคุณสามารถปล่อยให้พวกเขาทำงานทั้งหมดในเวลาเดียวกันแทนที่จะมีทุกสิ่งที่ใช้ maven ในคิว!