Saya memiliki garpu perpustakaan kecil bersumber terbuka yang sedang saya kerjakan di github. Saya ingin membuatnya tersedia untuk pengembang lain melalui maven, tetapi saya tidak ingin menjalankan server Nexus saya sendiri, dan karena itu garpu, saya tidak dapat dengan mudah menyebarkannya ke oss.sonatype.org.
Yang ingin saya lakukan adalah menyebarkannya ke github sehingga orang lain dapat mengaksesnya menggunakan pakar. Apa cara terbaik untuk melakukan ini?
maven
github
github-pages
mvn-repo
emmby
sumber
sumber
Jawaban:
Solusi terbaik yang dapat saya temukan terdiri dari langkah-langkah ini:
mvn-repo
untuk meng-host artefak pakar Anda.mvn-repo
sebagai repositori maven.Ada beberapa manfaat menggunakan pendekatan ini:
mvn-repo
, seperti halaman github disimpan dalam cabang terpisah yang disebutgh-pages
(jika Anda menggunakan halaman github)gh-pages
jika Anda menggunakannya.mvn deploy
seperti biasaCara khas Anda menggunakan artefak ke repo pakar jarak jauh adalah dengan menggunakan
mvn deploy
, jadi mari kita tambal ke dalam mekanisme untuk solusi ini.Pertama, beri tahu pakar untuk menyebarkan artefak ke lokasi pementasan sementara di dalam direktori target Anda. Tambahkan ini ke Anda
pom.xml
:Sekarang coba jalankan
mvn clean deploy
. Anda akan melihat bahwa itu dikerahkan repositori maven Anda untuktarget/mvn-repo
. Langkah selanjutnya adalah membuatnya mengunggah direktori itu ke GitHub.Tambahkan informasi autentikasi Anda ke
~/.m2/settings.xml
sehingga githubsite-maven-plugin
dapat mendorong ke GitHub:(Sebagaimana dicatat, pastikan untuk
chmod 700 settings.xml
memastikan tidak ada yang bisa membaca kata sandi Anda di file. Jika seseorang tahu cara membuat situs-maven-plugin meminta kata sandi alih-alih memerlukannya dalam file konfigurasi, beri tahu saya.)Kemudian beri tahu GitHub
site-maven-plugin
tentang server baru yang baru saja Anda konfigurasikan dengan menambahkan yang berikut ke pom Anda:Terakhir, konfigurasikan
site-maven-plugin
untuk mengunggah dari repo sementara Anda kemvn-repo
cabang Anda di Github:The
mvn-repo
cabang tidak perlu ada, itu akan dibuat untuk Anda.Sekarang jalankan
mvn clean deploy
lagi. Anda akan melihat maven-deploy-plugin "mengunggah" file ke repositori pementasan lokal Anda di direktori target, lalu situs-maven-plugin melakukan file-file itu dan mendorongnya ke server.Kunjungi github.com di browser Anda, pilih
mvn-repo
cabang, dan verifikasi bahwa semua binari Anda ada di sana.Selamat!
Anda sekarang dapat menggunakan artefak pakar Anda ke repo publik orang miskin hanya dengan berlari
mvn clean deploy
.Ada satu langkah lagi yang ingin Anda ambil, yaitu mengkonfigurasi setiap pom yang bergantung pada pom Anda untuk mengetahui di mana repositori Anda. Tambahkan cuplikan berikut ke pom proyek apa pun yang bergantung pada proyek Anda:
Sekarang setiap proyek yang memerlukan file jar Anda akan secara otomatis mengunduhnya dari repositori github maven Anda.
Sunting: untuk menghindari masalah yang disebutkan dalam komentar ('Kesalahan membuat komit: Permintaan tidak valid. Untuk' properti / nama ', nil bukan string.'), Pastikan Anda menyatakan nama di profil Anda di github.
sumber
<merge>true</merge>
konfigurasi situs-maven-plugin Anda. Jika Anda melakukannya, saya pikir Anda harus secara manual membuat cabang mvn-repo di github dan menghapus semua file-nya pertama kali.<altDeploymentRepository>internal.repo::default::file://${user.dir}/target/mvn-repo</altDeploymentRepository>
dengan maven-deploy-plugin , dan<outputDirectory>${user.dir}/target/mvn-repo</outputDirectory>
dengan situs-maven-plugin . Ini akan menyebarkan semua artefak ke proyek root ("parent"), dan mendorongnya ke direktori induk masing-masing di github. Kalau tidak, pembangunan setiap sub-modul akan menimpa sub-modul yang dibangun sebelum ...<github.global.userName>YourUserName</github.global.userName> <github.global.password>${GITHUB_OAUTH_TOKEN</github.global.password>
Jangan gunakan GitHub sebagai Repositori Maven.
Sunting: Opsi ini mendapat banyak suara turun, tetapi tidak ada komentar mengapa. Ini adalah opsi yang benar terlepas dari kemampuan teknis untuk menjadi tuan rumah di GitHub. Hosting di GitHub salah karena semua alasan yang diuraikan di bawah ini dan tanpa komentar, saya tidak dapat meningkatkan jawaban untuk mengklarifikasi masalah Anda.
Opsi Terbaik - Berkolaborasi dengan Proyek Asli
Pilihan terbaik adalah meyakinkan proyek asli untuk memasukkan perubahan Anda dan tetap dengan yang asli.
Alternatif - Pertahankan Fork Anda sendiri
Karena Anda telah bercabang pustaka sumber terbuka, dan garpu Anda juga merupakan sumber terbuka, Anda dapat mengunggah garpu Anda ke Maven Central (baca Panduan untuk mengunggah artefak ke Repositori Pusat ) dengan memberikan yang baru
groupId
dan mungkin yang baruartifactId
.Pertimbangkan opsi ini hanya jika Anda bersedia mempertahankan garpu ini sampai perubahan dimasukkan ke dalam proyek asli dan kemudian Anda harus meninggalkan yang ini.
Sangat mempertimbangkan keras apakah garpu adalah pilihan yang tepat. Baca berbagai hasil Google untuk 'mengapa tidak melakukan fork'
Pemikiran
Memperbesar repositori Anda dengan toples meningkatkan ukuran unduhan tanpa manfaat
Guci adalah salah satu
output
dari proyek Anda, dapat dibuat ulang kapan sajainputs
, dan repo GitHub Anda hanya boleh berisiinputs
.Tidak percaya padaku Kemudian periksa hasil Google untuk 'jangan menyimpan binari di git' .
Bantuan GitHub Bekerja dengan file besar akan memberi tahu Anda hal yang sama. Memang toples itu tidak besar tetapi mereka lebih besar dari kode sumber dan sekali toples telah dibuat oleh rilis mereka tidak punya alasan untuk versi - itu adalah tujuan dari rilis baru.
Menentukan beberapa repo di pom.xml Anda memperlambat pembangunan berdasarkan Jumlah Repositori kali Jumlah Artefak
Stephen Connolly mengatakan :
Betul sekali! Maven perlu memeriksa setiap artefak (dan dependensinya) yang ditentukan dalam pom.xml Anda terhadap setiap Repositori yang telah Anda tetapkan , karena versi yang lebih baru mungkin tersedia di salah satu repositori tersebut.
Cobalah sendiri dan Anda akan merasakan sakitnya tubuh yang lambat.
Tempat terbaik untuk artefak adalah di Maven Central, sebagai tempat utama untuk guci, dan ini berarti bangunan Anda hanya akan memeriksa satu tempat.
Anda dapat membaca lebih lanjut tentang repositori di dokumentasi Maven tentang Pengantar Repositori
sumber
Anda dapat menggunakan JitPack (gratis untuk repositori Git publik) untuk mengekspos repositori GitHub Anda sebagai artefak Maven. Sangat mudah. Pengguna Anda perlu menambahkan ini ke pom.xml mereka:
Seperti dijawab di tempat lain , idenya adalah bahwa JitPack akan membangun repo GitHub Anda dan akan melayani toples. Syaratnya adalah Anda memiliki file build dan rilis GitHub.
Yang menyenangkan adalah Anda tidak harus menangani penyebaran dan unggahan. Karena Anda tidak ingin mempertahankan repositori artefak Anda sendiri, ini cocok dengan kebutuhan Anda.
sumber
Alternatif lain adalah menggunakan hosting web apa pun dengan dukungan webdav. Anda akan memerlukan ruang untuk ini di suatu tempat tentu saja tetapi mudah untuk mengatur dan alternatif yang baik untuk menjalankan server nexus penuh sesak nafas.
tambahkan ini ke bagian build Anda
Tambahkan sesuatu seperti ini ke bagian Manajemen distribusi Anda
Akhirnya pastikan untuk mengatur akses repositori di settings.xml Anda
tambahkan ini ke bagian server Anda
dan definisi untuk bagian repositori Anda
Terakhir, jika Anda memiliki hosting php standar, Anda dapat menggunakan sesuatu seperti sabredav untuk menambahkan kemampuan webdav.
Keuntungan: Anda memiliki repositori maven sendiri Kerugian: Anda tidak memiliki kemampuan manajemen apa pun di nexus; Anda memerlukan pengaturan webdav di suatu tempat
sumber
Sejak 2019 Anda sekarang dapat menggunakan fungsi baru yang disebut registri paket Github .
Pada dasarnya prosesnya adalah:
settings.xml
gunakan menggunakan
sumber
Sebagai alternatif, Bintray menyediakan hosting gratis dari repositori pakar. Itu mungkin alternatif yang baik untuk Sonatype OSS dan Maven Central jika Anda benar-benar tidak ingin mengganti nama groupId. Tapi tolong, setidaknya upayakan agar perubahan Anda terintegrasi di hulu atau ganti nama dan publikasikan ke Central. Ini membuat orang lain lebih mudah menggunakan garpu Anda.
sumber
Jika Anda hanya memiliki
aar
ataujar
file sendiri, atau hanya tidak ingin menggunakan plugin - Saya telah membuat skrip shell sederhana . Anda dapat mencapai hal yang sama dengannya - menerbitkan artefak Anda ke Github dan menggunakannya sebagai repo Maven publik.sumber