Cara terbaik untuk menyusun repositori Git untuk Maven

19

Saya butuh saran tentang cara menyusun proyek kami di Git. Kami menggunakan Java dan Maven adalah alat build kami. Maven agak menganggap semua proyek Anda memiliki leluhur yang sama pada akhirnya. Maven juga bisa menjadi ratu drama nyata ketika segalanya tidak diatur persis seperti yayasan Apache mengatur proyek mereka (siapa pun yang menggunakan plugin rilis mungkin tahu apa yang saya bicarakan).

Kami ingin pom induk level atas yang mengontrol versi plugin dan membangun konfigurasi (konfigurasi repo, artefak apa yang akan dibangun, penamaan konvensi, versi plugin, dll). Maven ingin semua proyek TI kami berada di dalam subfolder dari proyek utama itu. Ini menyiratkan satu repo Git besar untuk organisasi.

Ini akan membuat lingkungan yang sangat bising. Jika ada dua tim yang mengerjakan proyek yang tidak terkait, mereka harus terus-menerus menarik gabungan dari tim lain. Idealnya saya ingin memiliki satu repo per proyek.

Tapi bentrokan semacam itu dengan model Maven yang sangat hierarkis, yang menuntut sub-proyek menjadi sub-folder.

Saya butuh saran tentang bagaimana orang merekonsiliasi kedua model ini ... terima kasih!

Jonathan S. Fisher
sumber

Jawaban:

19

Anda memiliki 2 opsi:
1. dengan cara git: gunakan submodules. Berikut ini adalah dokumentasi bagaimana git mengelola submodules git submodules . Saya pribadi tidak menggunakannya tetapi tampaknya sesuai dengan masalah Anda.
2. dengan cara maven: di maven tidak wajib bahwa proyek root Anda (konfigurasi) untuk menjadi hierarki direktori induk dari semua proyek Anda. Anda dapat memiliki struktur seperti itu:

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)

konfigurasi, project1 dan project2 berada di level direktori yang sama dan masing-masing bisa menjadi repositori git. Ketika membangun project1 atau project2 Anda menjalankan perintah maven dari level project1 atau project2 dan maven akan mencoba mengambil induk (konfigurasi) dari repositori maven bukan dari direktori induk. Anda harus memperhatikan versi. Saya akan merekomendasikan di project1 atau project2 untuk menjaga referensi ke orang tua (konfigurasi) dengan versi rilis. Untuk membuat rilis, Anda harus melakukannya dalam 2 langkah: lepaskan konfigurasi terlebih dahulu dan lepaskan proyek kedua. Project1 dan project2 dapat berkembang secara independen dan tidak harus memiliki versi konfigurasi yang sama dengan orangtua.

Hanya untuk kasus-kasus khusus ketika Anda ingin memiliki kedua konfigurasi dan proyek sebagai versi SNAPSHOT, di project1 atau project2 Anda dapat menggunakan <relativePath>tag di dalam <parent>tag untuk menunjuk ke jalur konfigurasi lokal Anda. Saya tidak merekomendasikan ini karena akan menimbulkan masalah pada lingkungan pengembangan (setidaknya bagi saya di Eclipse)

Saya minta maaf untuk bahasa Inggris saya.

catta
sumber
3

Maven ingin semua proyek TI kami berada di dalam subfolder dari proyek utama itu

Tidak, Maven hanya ingin dapat mengambil artefak yang dibutuhkannya. Cara terbaik untuk melakukan ini adalah dengan repositori artefak, seperti Nexus atau Artifactory . Setiap proyek dapat memiliki repositori Git sendiri.

Kami ingin pom induk tingkat atas yang mengontrol versi plugin dan membangun konfigurasi (konfigurasi repo, artefak apa yang akan dibangun , penamaan konvensi, versi plugin, dll.

Ada masalah Anda yang sebenarnya. Masuk akal untuk menggunakan POM induk untuk menegakkan konfigurasi, tetapi tidak ada alasan untuk menggabungkan konfigurasi dengan kontrol build. Bahkan, kecuali untuk proyek multi-modul yang berdiri sendiri, saya akan mengatakan bahwa itu adalah ide yang sangat buruk, hanya untuk alasan yang Anda nyatakan (ditambah fakta bahwa Anda harus membangun semua proyek Anda, semua waktu).

parsifal
sumber
Saya akrab dengan bagaimana pakar bekerja. Dan tidak, saya tidak ingin tim saya membangun basis kode seluruh. Biasanya Anda akan memilih sejumlah kecil proyek dan menariknya keluar dari kontrol sumber. Kami memiliki server nexus untuk meng-host artefak jadi, jadi tidak ada alasan untuk membangun seluruh basis kode. Dan begitu organisasi Anda memiliki ukuran tertentu, menjalankan infrastruktur bersama menghemat uang. Memiliki konfigurasi pusat untuk melakukan itu adalah satu-satunya cara untuk memastikan itu berfungsi, setiap saat.
Jonathan S. Fisher
Dear @parsifal, silakan lihat pertanyaan saya tentang membuat aplikasi java multi-layer stackoverflow.com/questions/49562268/…
Hosein Aqajani