sbt ve Gradle karşılaştırması [kapalı]


110

Scala'ya dalıyorum ve sbt'yi fark ettim. Java / groovy projelerinde Gradle'dan oldukça memnun kaldım ve Gradle için bir scala eklentisi olduğunu biliyorum.

Bir Scala projesinde Gradle yerine sbt'yi tercih etmek için iyi nedenler ne olabilir?


SBT bir bakıma bir Vim gibidir: Eğer onu sallarsanız, memnun olursunuz. Ve bu arada, maven ve lein de var (clojure için yaratıldı, ancak scala ile de çalışıyor).
om-nom-nom

18
SBT'ye geçmek için baskı hissetmeyin. Scala topluluğunun bazı tanınmış üyeleri Gradle kullanıyor. Bunun yerine, SBT'yi bir deney olarak kullanın, bunun yerine Gradle'ı kullanabileceğinizi bilerek.
Daniel C. Sobral

6
Hepinize teşekkürler ... Görüşlerinizi okuduktan sonra, Gradle'a bağlı kalacağım. Bana öyle geliyor ki, Maven'i geride bıraktığımız gibi, JVM alanı için araç oluşturma çabalarının çoğu burada olacak.
Hans Westerbeek

10
Bu sorunun burada, muhtemelen JVM alanında her zaman çalışmayan (ve dolayısıyla gözetimden yoksun) kişiler tarafından 'fikir temelli' olarak işaretlenmesi can sıkıcıdır. Aşağıdaki cevaplar gerçeklere dayalıdır ve kutsal savaş izninden yoksundur.
Hans Westerbeek

4
Hayır, bu cevaplar esas olarak test edilebilir gerçeklerin beyanlarıdır, görüşler değil. Bu soru ederken olabilir yararsız cevapları çekmek o, aslında, bu yüzden yapmadı. Araçlar arasındaki gerçek farklılıkların faydalı bir açıklaması olarak açık kalmalıdır.
erickson

Yanıtlar:


61

SBT ve Gradle arasındaki önemli bir farkın bağımlılık yönetimi olduğunu unutmayın :

Önbelleğin kafasının karışabileceği doğru, ancak Ivy'nin anlık görüntüleri çözmeyi anlamadığı doğru değil. Eugene bu noktayı başka bir başlıkta, belki de yönetici listesinde açıkladı. 0.12'de ele alınan sbt'nin otomatik güncellemesinde bir sorun var.

Bildiğim kadarıyla Ivy'nin desteklemediği şey, Maven'in yaptığı gibi anlık görüntüler yayınlamak. Bunu başka bir yerde ifade ettiğime inanıyorum, ancak durumu iyileştirmek isteyen biri olursa, bence en iyi çaba, bağımlılık yönetimi kodunu yeniden kullanmak için Gradle ekibiyle birlikte çalışmaktır.

Sizi bilgilendirmek gerekirse, Ivy ve Maven anlık görüntü bağımlılıkları ile ilgili sorunlar, Gradle'ın sonunda Ivy'yi kendi bağımlılık yönetimi koduyla değiştirmesinin nedenlerinden biriydi. Bu büyük bir görevdi ama bize pek çok iyilik getirdi.

Bu tweet , tüm durumun gelecekte gelişebileceğinden bahsediyor:

Mark, geçmişte SBT için Ivy yerine Gradle kullanmakla ilgilendiğini söylemişti.

(her iki araç da birbirinden öğrenebilir )


1
Şimdiye kadar karşılaştığım en rahatsızlık sbt, her bahsedildiğinde yeniden derlenmeme kuralını belirtememenizdi. Java ve scala için yerleşik kurallar bu işleve sahiptir, ancak özel kurallar yazmak için açık değildir. Bu nedenle, bir program dosyası veya dokümantasyon oluşturduğunuzda ve jar dosyası oluştursanız bile, göreviniz kaynaklardaki herhangi bir değişikliğin gerçekten yapılmış olmasına bakılmaksızın her çağrıda gerçekleştirilir. Yapmak bile yeterince akıllı ama sbt değil
ayvango

1
@ayvango Bugünlerde durum böyle değil sbt. Android-sdk-eklentisi
dant3

Bu işlevsellik için hangi API'nin kullanıldığını biliyor musunuz?
ayvango

Yani bu sarmaşık hem maven hem de gradle ile karşılaştırıldığında eksik olan bir şey mi? Bu garip
tribbloid

53

Benim için SBT'nin temel özellikleri:

  • Hızlı derleme (daha hızlı fsc).
  • Sürekli derleme / test etme: komut ~test, bir değişikliği her kaydettiğinizde yeniden derler ve projenizi test eder.
  • Çeşitli ölçek sürümlerinde çapraz derleme ve çapraz yayınlama.
  • Doğru ölçekleme sürümü uyumluluğuyla bağımlılıkları otomatik olarak alma.

Olumsuz yönler:

  • Yeni kullanıcıları caydırma eğiliminde olan hiyeroglif sözdizimi (özellikle Java'dan geliyorlarsa)
  • Bir "görevi" tanımlamanın kolay bir yolu yok: Özel bir oluşturma prosedürüne ihtiyacınız varsa, bir eklenti bulmanız veya kendiniz bir eklenti yazmanız gerekecektir.

Scala'nın geriye dönük ikili uyumsuzlukla yaşadığı sorunlar nedeniyle çapraz derleme / yayınlama özelliğine ihtiyaç duyulduğu / ihtiyaç duyulduğu konusunda doğru muyum?
Hans Westerbeek

1
Evet. Scala 2.10'a geçerken bu sorunlar tekrar ortaya çıkabilir.
paradigmatik

1
Ekleyeceğim iki fark daha var: * SBT'de, bağımlılıkları kendi kendine yönetmek daha kolaydır, IMO. * SBT test koşucusu daha hızlı görünüyor; Burada bir takım kurnaz eşzamanlılık olduğundan şüpheleniyorum ama tahmin ediyorum. SBT, daha yetenekli ancak daha az olgun bir ürün gibi görünüyor.
Rick-777

25
'Hiyeroglif sözdizimi' dezavantajı için +1. SBT ile en büyük yakınmam bu. Operatör aşırı yükleme her zaman kötüye kullanımlara yol açar: - /
Ron Dahlgren

7
Şifreli SBT sözdizimi, ölçek açısından en kötüsünü ortaya çıkarır. Gradle, iyi düşünülmüş bir etki alanı modeline ve basit sözdizimine dayanmaktadır.
nemoo

40

sbt bir Scala DSL'dir ve onun için Scala birinci sınıf bir vatandaştır, bu nedenle prensipte uygun görünmektedir.

Ancak sbt, sürümler arasında büyük uyumsuz değişikliklerden muzdariptir, bu da bir görev için doğru çalışan eklentiyi bulmayı ve çalıştırmayı zorlaştırır.

Çözdüğünden daha fazla soruna neden olduğu için kişisel olarak sbt'den vazgeçtim. Aslında gradle'a geçtim.

Şekle gidin.


2
Bildiğim kadarıyla, çok büyük bir değişiklik oldu: sbt 0.7.x'ten 0.1.x'e geçtiğinde
om-nom-nom

1
Sbt 0.11.2 için bir eklenti kullanıyorsanız ve sonra sbt 0.12'ye giderseniz, eklenti yazarının yeni bir sürümü derlemesini veya bunu kendiniz yapmasını beklemeniz gerekir. idea-sbt bir örnektir.
fmpwizard

4
@fmpwizard sbt 0.12 satırı henüz yeniden değerlendirilmedi ... FUD yaymayı durdurun.
paradigmatik

3
Kullanımı imkansız değil, ekibimiz kullanıyor. Ama benim yorumum bu yanıtı desteklemek oldu, "... Ama sbt sürümler arasında büyük uyumsuz değişikliklerden muzdarip, bu da bir görev için doğru çalışan eklentiyi bulmayı ve onu çalıştırmayı zorlaştırıyor ..." , Sadece scct eklentisini kullanamam, onu değiştirmek zorunda kaldım (evet küçük bir değişiklik, ama sonra onu bir yerde yayınlamak zorunda kaldım ki tüm ekibim ona erişebilsin) İyi bir sebep olmadan acı.
fmpwizard

3
Gradle kullanarak farklı Scala sürümleri için çapraz derleme yapabiliyor musunuz?
Machisuji

4

Mezun olmak için oldukça yeniyim ve sbt'de çok yeniyim - şu ana kadar sbt hakkında gerçekten sevdiğim şey etkileşimli konsol. Neler olup bittiğine dair daha iyi bir fikir edinmem için 'teftiş' gibi komutları kullanmama izin veriyor. AFAIK gradle bu atm gibi bir şey sağlamaz.


-11

Sbt ve gradle, her ikisi de statik olarak yazılmış dillere dayanmaktadır ... ancak sbt'nin birkaç avantajı vardır:

  • daha iyi eklenti desteği, özellikle otomatik eklentiler
  • görevler arasında görev oluşturma ve bağımlılık yönetimi
  • sbt, artımlı yapıları desteklemesi ve sbt'nin büyük bir kısmının scala ile yazılması ve sbt build tanımlarının scala ile yazılması anlamında özellikle scala projelerine uygundur.
  • sbt, birçok yararlı yerleşik görevle birlikte etkileşimli kabuk desteğine sahiptir
  • sbt varsayılan yaşam döngüsü oldukça kullanışlıdır ve acemilere çok daha az çabayla başlayabilir

1
Gradle, statik olarak yazılmış bir dil olmayan groovy'ye dayanmaktadır.
Vistritium

Gradle görevler arasında bağımlılık yönetimi yapar, bir görev oluşturmak mümkün olduğu kadar kolaydır, bir eklenti yazmanın harika, Java, gradle eklentileri ve muhtemelen daha fazlasını alabilen gradle'dan daha kolay olabileceği hakkında hiçbir fikrim yok.
Johnride
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.