Maven
Sebagai Java Developer, tentu tidak asing dengan Maven, yaitu salah satu Build tool yang berfungsi untuk menangani build, release, manage dependensi dll secara terotomatisasi.
Adapun contoh Build Tool yang lain yang juga familiar adalah Gradle, seperti pada Android Studio atau pada sebagian besar IDE modern yang ada saat ini.
Maven Repository
Sedangkan Maven Repository adalah direktori/hosting/server tempat di mana semua artifak/ library/ plugin disimpan dan nantinya dapat diakses oleh local build tool(Maven/Gradle).
Adapun file artifak library biasanya berupa file .jar untuk Java library dan .aar untuk Android library.
Bagi seorang Java/Android developer, tentu tidak asing dengan Gradle script seperti dibawah ini.
0 1 2 3 4 5 6 |
repositories { ... google() mavenCentral() maven { url "https://developer.huawei.com/repo/" } ... } |
Script diatas artinya project yang di develop akan menggunakan library-library yang ada di repositori yang dideklarasikan, yaitu GoogleMaven, Maven Central dan Maven Repo Huawei.
Sehingga bagi seorang Java Library Developer, kebutuhan akan hosting Maven Repository sangatlah penting, yaitu untuk mempublish ibrary yang telah didevelop. Dan yang jelas pasti akan lebih keren, karena nanti deklarasinya akan seperti ini 😎 haha.
0 1 2 3 4 |
repositories { ... maven { url "< Url repository anda >" } ... } |
Publish Library ke Maven Repository
Sebelum masuk ke pembahasan tentang publishing, perlu diketahui ada beberapa alternatif Maven Repository yang bisa digunakan antara lain (ini sebatas yang saya tahu saja lho 😁✌️, mungkin masih banyak alternatif lainya):
1. jitpack.io
Kelebihan jitpack adalah terintegrasi dengan Github untuk open source library. Caranyapun gampang banget, tinggal ketik url githubnya, kemudian akan tergenerate gradle scriptnya.
Sedangkan untuk library yang non opensource atau closed-source harus pilih yang berbayar lur… 😎
2. packagecloud.io
Gratis namun dibatasi 2GB Storage dan 10GB Transfer. Lumayan keren, namun sepertinya masih ingin melirik yang lain.
3. Repsy.io
Gratis sampai dengan 3 GB Storage dan Unlimited Repositories, dan inilah yang saya gunakan.
4. Self-hosted Maven Repository
A.k.a Bikin Maven repo di hosting/server sendiri. Sebenarnya ini pilihan paling keren. Tapi sayangnya, beberapa teman DevOps yang saya tanya, kurang familiar dengan JVM.
5. Maven Central
Pilihan yang keren, tapi requirementnya kok ribet banget ya. Bakal panjang perjalanannya.
6. Google Cloud – Artifact Registry
Siapa yang ragu akan layanan Google Cloud. Tapi ya jelas ada harga, ada rupa. Bila berminat, bisa lihat sendiri pricingnya.
7. Azure DevOps Service
Layanan milik Microsoft ini ada fitur Azure Artifact dan fitur-fitur keren lainya. Tapi, lihat rincian biayanya saya kok pusing ya.
Publish library ke Repsy.io
Dari beberapa alternatif Maven Hosting yang ada, setelah sekian lama explorasi, baca referensi sana-sini, singkat cerita akhirnya pilihan saya jatuh pada Repsy.io. 😁
Repsy ini tidak hanya untuk Maven Repository saja, tapi juga NPM Regisrty dan Python Regisrty.
Oke, kita mulai step by stepnya.
1. Register.
Yak, silahkan daftar dulu gan.😊 kalo belum punya akun. Langsung saja Buka https://repsy.io lalu klik menu register. Nah, setelah berhasil register, kemudian silahkan login.
2. Membuat repository.
Kemudian bagian side menu kiri, pilih menu Maven.
Kemudian buat repositori baru dengan nama sesuai nama module dalam project anda. Caranya, tinggal ketik nama repo, laku klik tombol plus.
3. Set sebagai Publik Repository.
Agar dapat diakses secara umum, maka repositori harus diset sebagai public repository. Sebagai contoh, repository yang saya buat ini bernama gampil. Klik menu setting warna merah di sisi kanan. Lalu pada option Private repository, silahkan ubah menjadi disable .
4. Build artifak.
Buka library project anda, kemudian silahkan build library module anda. Setelah berhasil build, akan menghasilkan file artifak, biasanya berekstensi .aar atau .jar di direktori build/outputs/aar/< namafile-release.aar > . Nah, file artifak ini yang bakal kita publish ke Repsy.io. Oh iya, di project ini saya menggunakan Intellij IDEA Community Edition, bisa juga dengan Android Studio.
5. Membuat publishing script pada gradle.
Cara untuk mempublish artifak adalah mengunakan gradle script seperti berikut ini.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
plugins { id 'com.android.library' id 'maven-publish' // <-- Plugin Maven Publish } group = 'id.hangga.gampil' // <-- Full package name version = '1.0.3' archivesBaseName = "gampil" // <-- nama artifak publishing { publications { aar(MavenPublication) { groupId group artifactId archivesBaseName version project.version artifact("$buildDir/outputs/aar/${archivesBaseName}-release.aar") // Lokasi artifak hasil build } } repositories { maven { url 'https://repo.repsy.io/mvn//' credentials { username '< usernamenya >' password '< passwordnya >' } } } } |
Jika tidak ada error pada saat synchronize, maka tinggal klik menu publish yang berada dibawah nama modul library anda.
Jika publishing berhasil, maka akan muncul pesan berikut ini pada IDE Android Studio atau Intellij IDEA.
Nah, sekarang buka kembali halaman repsy.io, kemudian cek version terbaru apakah sesuai dengan publish terbaru.
Jika sudah muncul versi terbaru, maka artinya library anda sudah update dan siap digunakan oleh user/ developer.
6. Testing
Setelah berhasil publish, untuk sekedar quick testing, bisa dicoba install library pada project seperti biasa.
Tambahkan remote maven repo pada build script
0 1 2 3 4 5 6 |
allprojects { repositories { google() mavenCentral() maven {url 'https://repo.repsy.io/mvn/hangga/gampil'} } } |
Kemudian tambahkan dependensi seperti biasa. haha..
0 1 2 3 4 5 |
dependencies { ... implementation 'id.hangga.gampilcamera:gampil:1.0.4' ... ... } |
Selamat berexperimen. 😎