Yanıtlar:
Feragatname: Bazel üzerinde çalışıyorum ve Gradle'ı yakından tanımıyorum. Ancak, iş arkadaşlarımdan biri, burada yorumlayacağım iki sistemin bir karşılaştırmasını yazdı:
Bazel ve Gradle, yapım deneyiminin farklı yönlerini vurgular. Bir dereceye kadar, öncelikleri uyumsuz - Gradle'ın esneklik ve rahatsız edici olmama arzusu, yapı yapısına getirebileceği kısıtlamaları sınırlarken, Bazel'in güvenilirlik ve performans arzusu mutlaka pazarlık edilemez kısıtlamaları zorlar.
Gradle, Bazel'in yaptığı ilkelere değer verir, yani Gradle ekibi performansa (artımlı yapılar, paralel yapılandırma ve yürütme, Gradle daemon), doğruluk (içeriğe dayalı “güncel” kontrol) ve tekrarlanabilirliğe büyük önem verir (bildirici sözdizimi, bağımlı sürüm oluşturma, açıkça bildirilen bağımlılıklar için zengin destek). Bazel, esnek proje düzenlerine duyulan ihtiyaca saygı duyuyor.
Nüans, Gradle'ın iyi uygulamayı teşvik etmek isterken Bazel bunu istemektedir. Gradle, Ant deneyimi (kendi proje yapınızı tutarsız sonuçlarla tanımlama özgürlüğü) ve Maven deneyimi (değişen proje ihtiyaçlarına yer bırakmayan zorunlu en iyi uygulamalar) arasında bir orta noktayı hedefler. Bazel, güçlü iş akışlarını sağlayan güçlü garantilerden ödün vermeden esnek proje desteğinin mümkün olduğuna inanıyor.
Her iki felsefe de daha “doğru” değildir; bir projeye en uygun araç hangisi o projenin değerlerine bağlıdır.
Gradle, kullanıcıların projelerini nasıl düzenledikleri konusunda minimum kısıtlamayla eksiksiz ve güvenilir yapı akışları oluşturmalarını kolaylaştıran oldukça esnek bir sistemdir. Bunu, kullanıcıların istediği şekilde bu blokları birleştirebilen genel, Turing-complete, komut dosyası arabirimi ile güçlü yapı blokları (örn. Otomatik bağımlılık izleme ve alma, sıkıca entegre eklenti desteği) sağlayarak yapar.
Gradle aşağıdaki özellikleri vurgular:
Bazel, dahili Google projelerini güvenilir ve verimli bir şekilde oluşturma ihtiyacından çıktı. Google'ın geliştirme ortamı alışılmadık derecede geniş ve karmaşık olduğu için Bazel, yapılarının bütünlüğü ve bunları gerçekleştirirken alışılmadık derecede düşük performans yükü hakkında alışılmadık derecede güçlü garantiler sunar.
Bu, bir “derleme” referans verilebilen, tekrarlanabilen, farklı makinelere aktarılabilen ve her örneğin bilindiği şekilde keyfi programlara ve hizmetlere geçirilebilen soyut bir varlık haline gelen tekrarlanabilir yapıların etrafında inşa edilmiş güçlü geliştirme iş akışları için bir temel sağlar. tam olarak aynı.
Bazel aşağıdaki özellikleri vurgular:
Makale bağlantıları ölme eğiliminde olduğundan , Gradle Team'in Bazel hakkındaki görüşlerinin bir özeti (çoğu doğrudan Mart 2015'te yayınlanan makaleden kaldırılmaktadır):
Google'a özgü bir sorunu çözmek için tasarlanmıştır; büyük bir monolitik kod tabanı (yüz milyonlarca LOC).
Bazel'in şu anda sağladığı paralellik avantajı "yaklaşmakta olan yeni konfigürasyon ve bileşen modelimiz" ile eşleştirilecek (buradaki makale tarihini aklınızda bulundurun).
Bazel, yapının geliştiriciler için kullanımını kolaylaştıran yüksek düzeyde beyan edici bir yapı diline sahip değildir. Google'da bu, oluşturma aracına sahip olan özel bir hizmet ekibi ile telafi edilebilir.
Bazel genişletilebilirlik için tasarlanmamıştır (ancak Bazel geliştirme ekibi bunu genişletilebilirlik üzerinde çalıştıklarına dair güvence ile karşılamış olsa da).
Hız, tüm geçişli bağımlılıkların büyük bir depoda saklandığı fikri etrafında optimize edilmiştir; tüm kütüphaneler ve araçlar bu merkezi depoda kontrol edilir. Çoğu İşletmenin daha fazla dağıtılmış bağımlılık yönetimi gereksinimleri vardır.
Bazel sadece * nix'tir, Windows üzerinde çalışmaz. Bu, çok sayıda potansiyel İşletmeyi ortadan kaldırır.
Eklenti ekosistemi yok.
Kepçe çoğunlukla JVM eko sisteminde (Java, Ggroovy, Scala, Kotlin ...) kullanılır. Projeniz bu alandaysa ve soruyu sormanız gerekiyorsa, Gradle veya Maven daha iyi bir seçim olacaktır. Bir Gradle derlemesinde sorun gidermek için yalnızca Java ve JVM ekosistemiyle mücadele edeceksiniz.
Kalpteki Bazel, artımlı değişiklikleri (ve dağıtılmış derleme önbelleğinin) algılama yeteneğine sahiptir ve artımlı derlemeler elde etmek için tepki vermenize, eklentiler / kurallar uygulamanıza izin verir. Bunu ayarlamak ve sürdürmek için CPP, Java ve Python (Skylark) ve Sistem Yöneticisi'nin bilgisinde de biraz bilgi gerekiyordu. Yine soru sormak zorunda kalırsanız Gradle veya Maven daha ucuz bir yatırım olacağını düşünüyorum. Bazel ile hangi dili, hangi şekilde tanımlarsanız, daha fazla güç, ancak bir maliyetle inşa edebilirsiniz.