Google baru saja membuka sumbernya untuk membangun alat Bazel . Apa perbedaan antara alat ini dan Gradle ? Apa yang bisa dilakukan Gradle yang tidak bisa, apa yang dilakukannya lebih baik, dan apa yang dilakukan Gradle lebih baik?
sumber
Google baru saja membuka sumbernya untuk membangun alat Bazel . Apa perbedaan antara alat ini dan Gradle ? Apa yang bisa dilakukan Gradle yang tidak bisa, apa yang dilakukannya lebih baik, dan apa yang dilakukan Gradle lebih baik?
Penafian: Saya bekerja di Bazel dan saya tidak akrab dengan Gradle. Namun, salah satu rekan kerja saya menulis perbandingan dari dua sistem, yang akan saya uraikan di sini:
Bazel dan Gradle menekankan berbagai aspek dari pengalaman membangun. Dalam batas tertentu, prioritas mereka tidak sesuai - keinginan Gradle untuk fleksibilitas dan non-obtrusif membatasi pembatasan yang dapat ditempatkan pada struktur bangunan, sementara keinginan Bazel untuk keandalan dan kinerja tentu saja memberlakukan pembatasan yang tidak dapat dinegosiasikan.
Gradle menghargai prinsip-prinsip yang sama seperti yang dilakukan Bazel, yaitu tim Gradle menaruh perhatian besar pada kinerja (peningkatan bertahap, konfigurasi dan eksekusi paralel, daemon Gradle), kebenaran (pengecekan berbasis konten "terkini"), dan reproduktifitas (dukungan kaya untuk sintaksis deklaratif, versi dependensi, dependensi yang dinyatakan secara eksplisit). Dan Bazel menghormati kebutuhan tata letak proyek yang fleksibel.
Nuansa itu adalah bahwa Gradle ingin mempromosikan praktik yang baik sementara Bazel ingin mewajibkannya. Gradle bertujuan untuk jalan tengah antara pengalaman Semut (kebebasan untuk menentukan struktur proyek Anda sendiri dengan hasil yang tidak jelas) dan pengalaman Maven (praktik terbaik yang diterapkan tanpa ruang untuk beragam kebutuhan proyek). Bazel percaya bahwa dukungan proyek yang fleksibel dimungkinkan tanpa mengorbankan jaminan kuat yang memungkinkan alur kerjanya yang kuat.
Tidak ada filosofi yang lebih “benar” - alat mana pun yang paling sesuai dengan proyek tergantung pada nilai-nilai proyek tertentu.
Gradle adalah sistem yang sangat fleksibel yang memudahkan pengguna untuk membangun aliran pembangunan yang lengkap dan andal dengan kendala minimal tentang cara mereka mengatur proyek mereka. Ini dilakukan dengan memasok blok bangunan yang kuat (mis. Pelacakan dan pengambilan dependensi otomatis, dukungan plugin terintegrasi ketat) dengan antarmuka skrip generik, lengkap Turing, yang dapat menggabungkan blok-blok ini sesuai keinginan pengguna.
Gradle menekankan fitur-fitur berikut:
Bazel berevolusi dari kebutuhan untuk membangun proyek-proyek internal Google secara andal dan efisien. Karena lingkungan pengembangan Google luar biasa besar dan kompleks, Bazel menawarkan jaminan yang luar biasa kuat tentang integritas build-nya dan overhead kinerja yang luar biasa rendah dalam mencapainya.
Ini memberikan landasan bagi alur kerja pengembangan yang kuat yang dibangun di sekitar bangunan yang dapat direproduksi, di mana "bangunan" menjadi entitas abstrak yang dapat dirujuk, diulangi, diedarkan ke mesin yang berbeda, dan diteruskan ke program dan layanan sewenang-wenang sehingga setiap instance diketahui dikenal persis sama.
Bazel menekankan fitur-fitur berikut:
Karena tautan artikel cenderung mati, berikut ringkasan pandangan Tim Gradle tentang Bazel (sebagian besar diangkat langsung dari artikel, yang diterbitkan pada Maret 2015):
Itu dirancang untuk memecahkan masalah yang unik untuk Google; basis kode monolitik besar (ratusan juta LOC).
Keunggulan parallelisation yang saat ini disediakan Bazel akan dicocokkan dengan "konfigurasi baru kami dan model komponen" (ingat tanggal artikel di sini).
Bazel tidak memiliki bahasa build deklaratif tingkat tinggi yang membuat build mudah digunakan untuk pengembang. Di Google ini dapat dikompensasi dengan tim layanan khusus yang memiliki alat build.
Bazel tidak dibangun untuk diperpanjang (meskipun tim pengembangan Bazel sejak itu membalas ini dengan jaminan bahwa mereka bekerja pada diperpanjang).
Kecepatan dioptimalkan berdasarkan gagasan bahwa semua dependensi transitif disimpan dalam satu repo besar; semua perpustakaan dan alat diperiksa ke repositori pusat ini. Sebagian besar perusahaan memiliki persyaratan manajemen ketergantungan yang lebih terdistribusi.
Bazel hanya * nix, tidak berjalan di Windows. Ini menghilangkan sejumlah besar Perusahaan potensial.
Tidak ada ekosistem plugin.
sumber
Gradle sebagian besar digunakan dalam sistem eco JVM (Java, Ggroovy, Scala, Kotlin ...). Jika proyek Anda ada di area ini, dan Anda harus mengajukan pertanyaan, Gradle atau Maven akan menjadi pilihan yang lebih baik. Untuk memecahkan masalah pembangunan Gradle, Anda hanya akan berkutat dengan ekosistem Java dan JVM.
Bazel di jantung memiliki kemampuan untuk mendeteksi perubahan inkremental (serta cache build terdistribusi) dan memungkinkan Anda untuk bereaksi, menerapkan plugin / aturan untuk mencapai build inkremental. Untuk mengatur dan memelihara ini diperlukan sedikit pengetahuan dalam CPP, Java dan Python (Skylark) dan juga pengetahuan System Admin. Sekali lagi jika Anda harus mengajukan pertanyaan, saya pikir Gradle atau Maven akan menjadi investasi yang lebih murah. Dengan Bazel Anda dapat membangun bahasa apa pun, dengan cara apa pun yang Anda tetapkan, lebih banyak kekuatan, tetapi dengan biaya.
sumber