วิธีที่ดีที่สุดในการจัดโครงสร้างที่เก็บ Git สำหรับ Maven


19

ฉันต้องการคำแนะนำเกี่ยวกับวิธีการจัดโครงสร้างโครงการของเราใน Git เราใช้ Java และ Maven เป็นเครื่องมือสร้างของเรา Maven kinda ถือว่าโครงการทั้งหมดของคุณมีบรรพบุรุษร่วมกันในที่สุด Maven ยังสามารถเป็นราชินีละครจริงเมื่อสิ่งที่ไม่ติดตั้งตรงทาง Apache ชุดมูลนิธิโครงการของพวกเขา (ทุกคนที่ใช้ปล่อยปลั๊กอินอาจจะรู้ว่าสิ่งที่ผมพูดถึง)

เราต้องการ pom พาเรนต์ระดับบนสุดที่ควบคุมเวอร์ชันของปลั๊กอินและสร้างการกำหนดค่า (การกำหนดค่า repo สิ่งที่จะสร้างการตั้งชื่ออนุสัญญารุ่นของปลั๊กอิน ฯลฯ ) Maven ต้องการให้โครงการไอทีทั้งหมดของเราอยู่ในโฟลเดอร์ย่อยของโครงการหลักนั้น นี่หมายถึง repo Git ขนาดใหญ่หนึ่งรายการสำหรับองค์กร

สิ่งนี้จะทำให้สภาพแวดล้อมที่มีเสียงดังมาก หากมีสองทีมที่ทำงานในโครงการที่ไม่เกี่ยวข้องพวกเขาจะต้องดึงการรวมตัวของทีมอื่นอย่างต่อเนื่อง ฉันอยากได้ repo หนึ่งต่อโครงการ

แต่การปะทะแบบนั้นกับโมเดลลำดับขั้นสุดยอดของ Maven ซึ่งต้องการโครงการย่อยเป็นโฟลเดอร์ย่อย

ฉันต้องการคำแนะนำเกี่ยวกับวิธีที่ผู้คนคืนดีแบบจำลองทั้งสองนี้ ... ขอบคุณ!


คำตอบ:


19

คุณมี 2 ตัวเลือก:
1. ตามวิธี git: ใช้ submodules นี่คือเอกสารวิธีการคอมไพล์จัดการ submodules คอมไพล์ submodules โดยส่วนตัวฉันไม่ได้ใช้ แต่ดูเหมือนว่าจะเหมาะกับปัญหาของคุณ
2. โดยทาง maven: ใน maven มันไม่จำเป็นที่โครงการรากของคุณ (การกำหนดค่า) จะเป็นลำดับชั้นไดเรกทอรีหลักของโครงการทั้งหมดของคุณ คุณสามารถมีโครงสร้างดังนี้

configuration
 +-- pom.xml (configuration:XXX)
project1
 +-- pom.xml (project1:1.0-SNAPSHOT)
 !
 +-- module11 
 !     +-- pom.xml (1.0-SNAPSHOT)
 +-- module12
       +-- pom.xml (1.0-SNAPSHOT)
project2
 +-- pom.xml (project2:2.0-SNAPSHOT)
 !
 +-- module21 
 !     +-- pom.xml (2.0-SNAPSHOT)
 +-- module22
       +-- pom.xml (2.0-SNAPSHOT)

การกำหนดค่า project1 และ project2 อยู่ในระดับไดเรกทอรีเดียวกันและแต่ละรายการอาจเป็นที่เก็บ git เมื่อ build project1 หรือ project2 คุณรันคำสั่ง maven จาก project1 หรือ project2 ระดับและ maven จะพยายามดึงพาเรนต์ (การกำหนดค่า) จากที่เก็บ maven ที่ไม่ได้มาจากไดเร็กทอรีพาเรนต์ คุณควรใส่ใจกับรุ่นต่างๆ ฉันจะแนะนำใน project1 หรือ project2 เพื่อให้การอ้างอิงไปยังผู้ปกครอง (การกำหนดค่า) กับรุ่นที่วางจำหน่าย ในการสร้างรีลีสคุณต้องทำใน 2 ขั้นตอน: ปล่อยการกำหนดค่าก่อนและรีลีสโปรเจ็กต์ที่สอง Project1 และ project2 สามารถพัฒนาได้อย่างอิสระและไม่จำเป็นต้องมีรุ่นการกำหนดค่าเดียวกับพาเรนต์

สำหรับกรณีพิเศษเมื่อคุณต้องการให้ทั้งการกำหนดค่าและโครงการเป็นรุ่น SNAPSHOT ใน project1 หรือ project2 คุณสามารถใช้<relativePath>แท็กด้านใน<parent>แท็กเพื่อชี้ไปที่พา ธ การกำหนดค่าท้องถิ่นของคุณ ฉันไม่แนะนำเพราะจะสร้างปัญหาเกี่ยวกับสภาพแวดล้อมการพัฒนา (อย่างน้อยสำหรับฉันใน Eclipse)

ฉันขอโทษสำหรับภาษาอังกฤษของฉัน


3

Maven ต้องการให้โครงการไอทีทั้งหมดของเราอยู่ในโฟลเดอร์ย่อยของโครงการหลักนั้น

ไม่ Maven เพียงต้องการที่จะสามารถดึงสิ่งประดิษฐ์ที่ต้องการได้ วิธีที่ดีที่สุดที่จะทำคือการใช้พื้นที่เก็บข้อมูลสิ่งประดิษฐ์เช่นNexusหรือArtifactory แต่ละโครงการสามารถมีพื้นที่เก็บข้อมูล Git ของตัวเอง

เราต้องการ pom พาเรนต์ระดับบนสุดที่ควบคุมเวอร์ชันของปลั๊กอินและสร้างการกำหนดค่า (การกำหนดค่า repo สิ่งที่จะสร้างการตั้งชื่ออนุสัญญารุ่นของปลั๊กอิน ฯลฯ

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


ฉันคุ้นเคยสนิทสนมกับวิธีการทำงานของ Maven และไม่ฉันไม่ต้องการให้ทีมของฉันสร้างรหัสฐานทั้งหมด โดยทั่วไปแล้วคุณจะเลือกโครงการจำนวนน้อยและดึงพวกเขาออกจากการควบคุมแหล่งที่มา เรามีเซิร์ฟเวอร์ Nexus เพื่อโฮสต์สิ่งประดิษฐ์ที่เสร็จสิ้นแล้วดังนั้นจึงไม่มีเหตุผลที่จะสร้างรหัสฐานทั้งหมด และเมื่อองค์กรของคุณมีขนาดที่แน่นอนการทำงานบนโครงสร้างพื้นฐานที่ใช้ร่วมกันจะช่วยประหยัดเงิน การมีการกำหนดค่ากลางให้ทำเช่นนั้นเป็นวิธีเดียวที่จะทำให้แน่ใจว่าใช้ได้ทุกครั้ง
Jonathan S. Fisher

เรียน @parsifal โปรดดูคำถามของฉันเกี่ยวกับการสร้าง java multi layer app stackoverflow.com/questions/49562268/…
Hosein Aqajani
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.