Untuk memberikan akses ke library, Anda harus memilih repositori. Halaman ini akan memandu Anda untuk mengetahui beberapa pertimbangan yang terkait dengan pemilihan jenis repositori dan menunjukkan cara membuat publikasi menggunakan Plugin Maven Publish.
Sebelum mengupload library, pastikan Anda telah menyiapkan library Anda untuk dirilis dan mengonfigurasi varian publikasi atau perlengkapan pengujian yang diperlukan.
Memilih jenis repositori
Library dipublikasikan sebagai file AAR. File ini berisi kode yang dikompilasi sebagai bytecode dan library native, manifes Android, dan resource. Paket itu sendiri tidak mendeklarasikan identitas, versi, atau dependensi apa pun pada library lainnya.
Pada umumnya, menyediakan AAR melalui repositori merupakan praktik terbaik, daripada
mendistribusikan AAR secara langsung. Hal ini
membantu pengguna lebih memahami asal library
daripada menangani file name.aar
tanpa detail penting,
seperti versi. Saat mengupgrade ke versi library yang lebih baru, gunakan
repositori untuk memastikan bahwa hanya dependensi yang diperlukan dari versi yang lebih baru yang
ditambahkan sehingga pengguna tidak perlu memperbarui dependensi secara manual.
Ada beberapa manfaat dari menggunakan repositori untuk memublikasikan library Anda:
- Gradle dapat otomatis menambahkan dependensi library Anda ke grafik dependensi.
- Gradle dapat memastikan bahwa satu versi library Anda ada dalam grafik dependensi, yang menyelesaikan konflik jika library Anda secara transitif disertakan lebih dari sekali dengan versi lain.
- Plugin Android Gradle (AGP) dapat melakukan desugaring yang lebih efisien jika library menggunakan fitur bahasa Java 8 atau versi lebih tinggi sehingga mengurangi waktu build untuk pengguna Anda.
- Library Anda dapat menggunakan publikasi varian dan menyertakan fitur seperti perlengkapan pengujian.
Mendistribusikan AAR secara langsung tidak akan memberi pengguna informasi apa pun terkait identitas, versi, atau dependensi library Anda. Saat memublikasikan ke repositori, distribusi ditangani oleh file terpisah yang merupakan bagian dari mekanisme repositori. Untuk repositori Maven, distribusi akan ditangani oleh file POM. Oleh karena itu, sangat disarankan untuk memublikasikan library menggunakan repositori, bukan mendistribusikan file AAR secara manual.
Jenis repositori
Ada tiga jenis repositori:
- Repositori online gratis, seperti Maven Central, memungkinkan siapa saja mengupload dan mendownload library.
- Repositori pribadi, dengan akses melalui login, memungkinkan distribusi library pribadi terkontrol.
- Repositori berbasis folder dan lokal memungkinkan distribusi library melalui download manual.
Menggunakan repositori lokal berbasis folder sangat mirip dengan memberikan link download manual AAR kepada pengguna atau mengirimkan AAR melalui email. Perbedaan utamanya adalah bahwa Anda tidak hanya mengirimkan AAR, tetapi juga informasi tambahan tentang identitas, versi, dan dependensi.
Anda mendistribusikan file zip dari repositori berbasis folder yang berisi AAR dan metadata. Kemudian, pengguna dapat mengekstrak isi file, menambahkan konten ke project, dan mengarahkan Gradle ke sana. Selanjutnya, pengguna dapat mendeklarasikan dependensi pada library menggunakan koordinat Maven, seolah-olah library tersebut berada di repositori online, dan mendapatkan manfaat dari semua keuntungan yang disebutkan sebelumnya.
Membuat publikasi
Publikasikan menggunakan Plugin Maven Publish Gradle. Dengan Plugin Maven Publish, Anda dapat mendeklarasikan publikasi dan
repositori, serta membuat tugas untuk memublikasikan publikasi ini ke
repositori. Publikasi ini menggunakan instance SoftwareComponent
yang dibuat oleh plugin yang mendorong build, dan dapat berupa plugin AGP atau
java-library
.
Perhatikan bahwa saat menjalankan Plugin Maven Publish dengan AGP, komponen
software tidak akan dibuat langsung saat plugin diterapkan. Sebaliknya,
yang dibuat selama
afterEvaluate()
callback. Oleh karena itu, publikasi yang memilih komponen software
juga harus dikonfigurasi selama langkah afterEvaluate()
.
Cuplikan kode berikut dari file build.gradle
level modul membuat
publikasi untuk varian tertentu yang dibuat dengan singleVariant()
atau
multipleVariants()
:
Groovy
publishing { publications { release(MavenPublication) { groupId = 'com.my-company' artifactId = 'my-library' version = '1.0' afterEvaluate { from components.release } } } }
Kotlin
publishing { publications { register<MavenPublication>("release") { groupId = "com.my-company" artifactId = "my-library" version = "1.0" afterEvaluate { from(components["release"]) } } } }
Pada contoh sebelumnya, nama komponen (components.release
)
didasarkan pada nama yang diberikan ke singleVariant()
atau multipleVariants()
.
Setelah mendeklarasikan publikasi, Anda harus membuat repositori target.
Memublikasikan ke repositori lokal
Memublikasikan ke repositori lokal sangat mirip dengan memublikasikan ke repositori jarak jauh, kecuali untuk deklarasi repositori. Baca bagian sebelumnya untuk mempelajari cara memublikasikan ke repositori jarak jauh untuk membuat publikasi yang memublikasikan satu atau beberapa varian yang diinginkan. Kemudian, buat repositori lokal:
Groovy
publishing { publications { release(MavenPublication) { ... } } repositories { maven { name = 'myrepo' url = layout.buildDirectory.dir("repo") } } }
Kotlin
publishing { publications { register<MavenPublication>("release") { ... } } repositories { maven { name = "myrepo" url = uri(layout.buildDirectory.dir("repo")) } } }
Tindakan ini akan membuat tugas bernama
publishReleaseToMyRepoRepository
, dan terdiri dari
nama publikasi dan nama repositori. Jalankan tugas ini
untuk membuat repositori ke lokasi yang disediakan. Dalam contoh ini,
repositori dibuat di dalam folder
build project, pada direktori repo
.
Jika Anda ingin secara otomatis membuat file zip repositori, lakukan menggunakan kode berikut:
Groovy
tasks.register('generateRepo', Zip) { def publishTask = tasks.named('publishReleasePublicationToMyrepoRepository') from publishTask.map { it.getRepository().getUrl() } into 'mylibrary' archiveFileName.set('mylibrary.zip') }
Kotlin
tasks.register<Zip>("generateRepo") { val publishTask = tasks.named( "publishReleasePublicationToMyrepoRepository", PublishToMavenRepository::class.java) from(publishTask.map { it.repository.url }) into("mylibrary") archiveFileName.set("mylibrary.zip") }
Kode ini membuat tugas Zip
bernama generateRepo
yang menggunakan konten tugas
publikasi dan mengompresinya sekaligus memastikan entri zip berada di
folder level atas yang bernama mylibrary
. Outputnya terletak di
build/distributions
.