ติดตั้ง POM หลักโดยไม่ต้องสร้างโมดูลลูก


115

ฉันมี POM หลักในโครงการ Maven ด้วยโครงสร้างนี้:

             parent
               |
        ---------------
        |             |
      child1       child2

ฉันต้องการติดตั้ง POM ของ"พาเรนต์"ใน REPO ในพื้นที่เพื่อให้child1ทำการเปลี่ยนแปลงบางอย่างที่ฉันทำในการจัดการการพึ่งพา แต่ฉันไม่สามารถทำการ "ติดตั้งใหม่ทั้งหมด" แบบปกติได้เนื่องจาก"child2"เสียและจะไม่สร้าง

ซึ่งเป็นวิธีที่เหมาะสมในการทำสิ่งนี้กับ maven (นอกเหนือจากไปที่ parent pom และแสดงความคิดเห็นโมดูล"child2" )

คำตอบ:


191

ใช้ตัวเลือก '-N' ในคำสั่ง mvn

จากmvn -h:

-N, - non-recursive อย่าเรียกซ้ำในโครงการย่อย


1
ตัวเลือก '-N' หรือ '- ไม่เรียกซ้ำ' หมายถึงอย่าสร้างซ้ำในโครงการย่อย
STB Land

37

ในขณะที่ Guillaume ถูกต้องและเป็นตัวเลือกที่ถูกต้อง แต่ฉันขอแนะนำให้เก็บพ่อแม่ของคุณไว้เป็นโมดูลแยกต่างหาก

ฉันพบว่าแนวทางที่ดีที่สุดสำหรับการสืบทอดเป็นดังนี้:

aggregator
|- module1/ (extends parent)
| |- pom.xml
|- module2/ (extends parent)
| |- pom.xml
|- parent/
| |- pom.xml
|- pom.xml

ด้วยวิธีนี้คุณสามารถติดตั้งพาเรนต์เท่านั้นmvn clean installโดยไม่มีตัวเลือกเพิ่มเติม

คุณยังสามารถมีพาเรนต์อยู่นอกตัวรวบรวมเพื่อให้คุณสามารถใช้ซ้ำระหว่างโปรเจ็กต์อื่น ๆ

มีประโยชน์มากมายในการรักษาผู้ปกครองและผู้รวบรวมเป็นสองสิ่งที่แยกจากกัน แต่สุดท้ายแล้วคุณจะเลือกสิ่งที่ดีที่สุดสำหรับโครงการ / สภาพแวดล้อมของคุณ


1
ฉันต่อสู้กับปัญหานี้เป็นเวลาหลายชั่วโมงและพบว่าบางโครงการกำลังทำในลักษณะนี้เช่น apache sling, JackRabbit และ Artifactory
Accuya

มันแยกการสืบทอดโมดูล maven (การอ้างอิงคุณสมบัติ ฯลฯ ) จากการสร้างแบตช์ (โมดูลลูก)
Danubian Sailor

4
นี่ถือเป็นแนวทางปฏิบัติที่ดีที่สุดหรือไม่? มีบล็อกหรืออื่น ๆ เกี่ยวกับแนวทางนี้หรือไม่?
เลื่อน

1
@ArtB คุณเคยเจอบทความแบบนี้หรือไม่?
Tomislav Nakic-Alfirevic

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