Scala projesinde SBT vs Maven kullanmanın artıları ve eksileri [kapalı]


138

Scala için en iyi yapım aracı hangisidir? Her birinin artıları ve eksileri nelerdir? Bir projede hangisini kullanacağımı nasıl belirleyebilirim?


5
Çok modüllü yapılara üstün desteği nedeniyle Maven'den Scala projeleri için Gradle'a geçtim. SBT ile Twitter deneyimi onlar tarafından "kör edici acı" olarak tanımlanıyor ve ondan uzaklaşmaya çalışıyorlar (Maven'le bu süreçte bir durma boşluğu olarak).
Ben Manes

24
Başka bir güzel kapalı soru ...
Cedric H.

14
Gördüğüm çok iyi soru sadece kapalı; Bu insanlara keyfi olarak kimin güç vereceğini bilmiyorum bir soruyu kapatıp kapatmamaya karar verdim. Daha yakın olup olmadıklarına bile dikkat etmiyorum.
user1888243

2
Katılıyorum. Neyse ki bu soru kapatılmadan önce 2 cevabımız var. Bu soruyu kapatmak için oy verenler için kötü ...
hqt

Yanıtlar:


83

Maven'i Scala projelerini oluşturmak için kullanıyoruz çünkü CI sunucumuzla iyi entegre oluyor. Elbette bir yapı başlatmak için bir kabuk senaryosu çalıştırabiliriz, ancak Maven'den CI'ye girmek istediğimiz bir sürü başka bilgimiz var. Maven'i bir Scala projesi için kullanmayı düşünebilmemin tek nedeni bu.

Aksi takdirde, sadece SBT kullanın. Aynı bağımlılıklara erişirsiniz (gerçekten maven hakkında en iyi bölüm, IMHO). Ayrıca büyük olan artımlı derlemeyi elde edersiniz. Projenizin içinde bir mermi başlatma yeteneği de harika.

ScalaMock sadece SBT ile çalışır ve muhtemelen bir Java alay kütüphanesi yerine bunu kullanmak isteyeceksiniz. Bunun üzerine , derleme dosyasına tam scala kodu yazabildiğiniz için SBT'yi genişletmek çok daha kolaydır, bu nedenle bir Mojo yazmanın tüm zorluklarından geçmek zorunda kalmazsınız.

Kısacası, CI sunucunuzla gerçekten sıkı bir entegrasyona ihtiyacınız yoksa SBT'yi kullanın.


21
Yukarıdakilerin hiçbiriyle aynı fikirde değilim, ama sadece birincil hedeflerinden biri olan diğer inşa sistemlerini desteklemeyi kolaylaştırmak olan ScalaMock 3'ü yazma sürecinde olduğumu belirtmek istedim .
Paul Butcher

1
Tam olarak söylemek gerekirse, ScalaMock 2'nin oluşturulan alayları kullanmanız gerekmediği sürece (yani sadece özellikleri / arayüzleri taklit etmeniz gerektiği sürece) herhangi bir yapı sistemi (sadece bir kavanoz) ile iyi çalıştığını belirtmek gerekir. ).
Paul Butcher


3
neden maven için artımlı bir derleme yazmadılar? IMHO, sbt, tedavi edilmemiş bir NIH sendromunun bir örneğidir ...
Cpt. Senkfuss

1
SBT nedeniyle neden CI ile ilgili problemler var?
Daniel

21

Soru sadece çok fazla fikir üretme tehlikesiyle karşı karşıya; gereksinimlerin net bir listesine veya ortamınızın açıklamasına, önceki bilgilere vb. sahip olmak daha iyi olur.

FWIW, bu scala posta listesi iş parçacığında daha fazla görüş var .

Benim 2c: Özel gereksinimleriniz yoksa sbt ile gidin

  • basit projeler için tamamen zahmetsizdir (bağımlılıklarınız olana kadar bir derleme dosyasına bile ihtiyacınız yoktur)
  • Scala açık kaynak projelerinde yaygın olarak kullanılır. Diğer insanların projelerine göz atarak yapılandırmayı kolayca öğrenebilirsiniz. Ayrıca birçok proje sbt kullandığınızı ve bunları projenize bağımlı olarak eklemek için hazır kopya + yapıştırma talimatı sağladığınızı varsayar .
  • IntelliJ IDEA kullanıyorsanız tamamen entegre edilebilir. Sen edebilirsiniz IDEA kullanım SBT sahip , hızlı bir şekilde SBT kullanabilirsiniz tersi sürekli projenizi derlemek için, ve yardımcısı IDEA projeleri üretmek . Son sürüm, küçük sürümden küçük sürüme çarpılan kendi kütüphanelerinize bağlı olarak bir 'anlık görüntü' döngüsündeyseniz son derece yararlıdır - sadece projeyi kapatın, derleme dosyasındaki sürümü güncelleyin, gen-ideave projeyi yeniden açın: güncellemeler yapıldı.
  • ihtiyacınız olacak en görevlerin (hazır geliyor compile, test, run, doc, publish-local, console) - consoleen iyi özelliklerinden biridir.
  • bazı insanlar bağımlılıkların doğrudan GitHub'dan alınan kaynak havuzları olabileceğini vurgulamaktadır. Ben kullanmadım bu yüzden burada yorum yapamam.

Bazı insanlar bağımlılık yönetimi için Ivy kullandığından sbt'den nefret ediyor (artılarını ve eksilerini yorumlayamıyorum, ancak çoğu zaman sorun değil), bazı insanlar sbt'den nefret ediyor çünkü yapı dosyasını XML yerine Scala DSL. Bazı insanlar sbt formatının v0.7'den v0.10'a değişmesinden hayal kırıklığına uğradılar, ancak açıkçası, sıfırdan başlarsanız göç sizi etkilemez.


27
Ben sbt nefret ediyorum çünkü sembolik operatörlerin kötüye kullanımı ve .sbt ve .scala tanım formatlarını desteklemesi gibi aptalca kararlar var, ancak bunları farklı konumlara koyuyor ve .sbt'deki ifadeler en az boş satır, vb. İle ayrılmalıdır. sbt şu anda gelişiyor ama yeterince iyi değil. En çok özlediğim bazı tam (gerçek dünya karmaşık en az) .sbt / .scala örnek dosyaları satır satır açıkladı, tüm sbt özelliklerini kapsayan. Maven çok daha berbat çünkü günlük sbt kullanın dedi.
xiefei

6
Bu sorunun kapatılmasından çok kötü, eminim ki gerçek farklılıklar da var: örneğin SBT ile ilgili Manning kitabından alıntı: "Maven hedefleri arasında bağımlılıklar varsa (bir hedefin başka biri tarafından tüketilen bir dosya oluşturduğunu varsayalım) sbt ile, görevler arasında açık bir bağımlılık belirtmeniz gerekir.Bu sbt'nin görevleri BY DEFAULT ile paralel olarak çalıştırmasını sağlar.A görevi B'ye ve C de B'ye bağlıysa, sbt B görevini çalıştırır ve A ve C'yi paralel olarak çalıştırır. " Umarım bu yorum bazı okuyuculara yardımcı olur.
jhegedus

19
Bu konuyu çok yararlı buldum. Sık sık Stackoverflow moderatörlerinin konuları çok hevesle kapattığını düşünüyorum. Kullanıcıların tam olarak aradıkları (ve web aramaları yoluyla buldukları) olduklarında "konu dışı" olup olmadıklarını kimin umursar. Stackoverflow modları kasıtlı olarak xkcd 979'u yeniden oluşturmaya çalışıyor gibi .
Ville

3
@Ville Düşüncelerim de. Aşağı oylama, düzenleme ve kapatma çok agresif hale geldi.
ankush981

2
Şimdi buna bakan herkes için @ xiefei'nin şikayetleri ele alındı. SBT, daha fazla özel işleç / sözdizimi bıraktı ve / sbt dosyalarındaki ifadelerin artık boşluk ayırmalarına ihtiyacı yok.
Mart'ta Grogs
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.