Ưu và nhược điểm của việc sử dụng sbt vs maven trong dự án Scala [đã đóng]


138

Công cụ xây dựng nào là tốt nhất cho Scala? Những ưu và nhược điểm của mỗi người trong số họ là gì? Làm thế nào để tôi xác định một trong số họ sẽ sử dụng trong một dự án?


5
Tôi đã chuyển từ các dự án Maven sang Gradle cho Scala, do sự hỗ trợ vượt trội của nó cho các bản dựng đa mô-đun. Trải nghiệm Twitter với SBT được họ mô tả là "nỗi đau mù quáng" và họ đang cố gắng tránh xa nó (với Maven là một khoảng trống trong quá trình đó).
Ben Manes

24
Một câu hỏi đóng tuyệt vời khác ...
Cedric H.

14
Vì vậy, nhiều câu hỏi hay tôi thấy chỉ là đóng cửa; Tôi không biết ai cung cấp sức mạnh cho những người này để quyết định đóng câu hỏi hay không. Tôi thậm chí không chú ý đến việc họ có thân thiết hay không nữa.
dùng1888243

2
Đồng ý. May mắn thay, chúng tôi có 2 câu trả lời trước khi câu hỏi này được đóng lại.
Thật

Câu trả lời:


83

Chúng tôi đang sử dụng Maven để xây dựng các dự án Scala tại nơi làm việc vì nó tích hợp tốt với máy chủ CI của chúng tôi. Chúng tôi chỉ có thể chạy một kịch bản shell để khởi động một bản dựng, tất nhiên, nhưng chúng tôi đã có một loạt các thông tin khác từ Maven mà chúng tôi muốn truy cập vào CI. Đó là lý do duy nhất tôi có thể nghĩ đến để sử dụng Maven cho một dự án Scala.

Nếu không, chỉ cần sử dụng SBT. Bạn có quyền truy cập vào cùng các phụ thuộc (thực sự là phần hay nhất về maven, IMHO). Bạn cũng có được phần tổng hợp gia tăng, rất lớn. Khả năng khởi động một lớp vỏ bên trong dự án của bạn, điều này cũng rất tuyệt.

ScalaMock chỉ hoạt động với SBT và có lẽ bạn sẽ muốn sử dụng thư viện đó hơn là thư viện giả định Java. Trên hết, việc mở rộng SBT dễ dàng hơn nhiều vì bạn có thể viết mã scala đầy đủ trong tệp xây dựng, do đó bạn không phải trải qua tất cả các quy tắc viết Mojo.

Nói tóm lại, chỉ cần sử dụng SBT trừ khi bạn thực sự cần tích hợp chặt chẽ vào máy chủ CI của bạn.


21
Tôi không đồng ý với bất kỳ điều nào ở trên, nhưng chỉ muốn chỉ ra rằng tôi đang trong quá trình viết ScalaMock 3 , một trong những mục tiêu chính là giúp hỗ trợ các hệ thống xây dựng khác dễ dàng hơn.
Paul Butcher

1
Để hoàn thiện, điều đáng nói là ScalaMock 2 hoạt động tốt với mọi hệ thống xây dựng (chỉ là một cái bình) miễn là bạn không cần phải sử dụng các giả lập được tạo ra (miễn là bạn chỉ cần chế giễu các đặc điểm / giao diện ).
Paul Butcher


3
Tại sao họ không viết một bản tổng hợp gia tăng cho maven? IMHO, sbt là một bản mẫu của hội chứng NIH không được điều trị ...
Cpt. Senkfuss

1
Tại sao có vấn đề với CI do SBT?
Daniel

21

Câu hỏi có nguy cơ chỉ tạo ra nhiều ý kiến; sẽ tốt hơn nếu có một danh sách rõ ràng các yêu cầu hoặc mô tả về môi trường của bạn, kiến ​​thức trước đây, v.v.

FWIW, có nhiều ý kiến ​​hơn trong chủ đề danh sách gửi thư scala này .

2c của tôi là: Đi với sbt nếu bạn không có yêu cầu cụ thể

  • đối với các dự án đơn giản, nó hoàn toàn dễ dàng (bạn thậm chí không cần tệp xây dựng cho đến khi bạn có phụ thuộc)
  • nó thường được sử dụng trên các dự án nguồn mở Scala. Bạn có thể dễ dàng tìm hiểu về cấu hình bằng cách nhìn trộm vào các dự án của người khác. Ngoài ra, nhiều dự án cho rằng bạn sử dụng sbt và cung cấp cho bạn hướng dẫn sao chép + dán sẵn để thêm chúng dưới dạng phụ thuộc vào dự án của bạn.
  • nếu bạn sử dụng IntelliJ IDEA, nó có thể được tích hợp hoàn toàn. Bạn có thể yêu cầu IDEA sử dụng sbt để liên tục biên dịch dự án của bạn và ngược lại bạn có thể sử dụng sbt để nhanh chóng tạo các dự án IDEA . Cách cuối cùng cực kỳ hữu ích nếu bạn đang trong chu trình 'ảnh chụp nhanh' tùy thuộc vào các thư viện khác của bạn bị lỗi từ phiên bản nhỏ sang phiên bản nhỏ - chỉ cần đóng dự án, cập nhật phiên bản trong tệp xây dựng, chạy lại gen-ideanhiệm vụ, và mở lại dự án: cập nhật xong.
  • có sẵn sàng với hầu hết các nhiệm vụ, bạn sẽ cần ( compile, test, run, doc, publish-local, console) - sự consolelà một trong những tính năng tốt nhất.
  • một số người nhấn mạnh tính năng mà các phụ thuộc có thể là kho lưu trữ nguồn được lấy trực tiếp từ GitHub. Tôi đã không sử dụng điều này vì vậy không thể bình luận ở đây.

Một số người ghét sbt vì nó sử dụng Ivy để quản lý phụ thuộc (tôi không thể nhận xét về ưu và nhược điểm của nó, nhưng hầu hết thời gian không phải là vấn đề), một số người ghét sbt vì bạn chỉ định tệp xây dựng theo điều khoản của Scala DSL thay vì XML. Một số người đã thất vọng vì định dạng của sbt đã thay đổi từ v0.7 thành v0.10, nhưng rõ ràng, việc di chuyển sẽ không ảnh hưởng đến bạn nếu bạn bắt đầu từ đầu.


27
Tôi ghét sbt vì việc lạm dụng các toán tử tượng trưng và một số quyết định ngu ngốc, chẳng hạn như cả hai định dạng hỗ trợ .sbt và .scala nhưng đặt chúng ở các vị trí khác nhau và các câu lệnh trong .sbt phải được phân tách bằng ít nhất là dòng trống, v.v. của sbt đang được cải thiện nhưng không đủ tốt tại thời điểm này. Điều tôi nhớ nhất là một số tệp hoàn chỉnh (tối thiểu đến phức tạp trong thế giới thực) .sbt / .scala giải thích từng dòng, bao gồm tất cả các tính năng sbt. Điều đó nói rằng, tôi sử dụng sbt hàng ngày vì Maven hút nhiều hơn.
xiefei

6
Thật tệ khi câu hỏi này đã bị đóng, tôi chắc chắn cũng có những khác biệt thực tế: ví dụ đoạn trích này từ cuốn sách Manning về SBT: "Nếu có sự phụ thuộc giữa các mục tiêu Maven (giả sử một mục tiêu tạo ra một tệp được sử dụng bởi một mục tiêu khác) sau đó bạn không thể song song bản dựng của mình với Maven. Với sbt, bạn phải chỉ định một phụ thuộc rõ ràng giữa các tác vụ. Điều này cho phép sbt chạy các tác vụ song song BỞI DEFAULT. Nếu tác vụ A phụ thuộc vào B, và C cũng phụ thuộc vào B, sau đó sbt chạy nhiệm vụ B và sau đó chạy song song A và C. " Hy vọng bình luận này sẽ giúp một số độc giả.
jhegedus 2/214

19
Tôi thấy chủ đề này rất hữu ích. Tôi rất thường nghĩ rằng người điều hành Stackoverflow đóng chủ đề quá háo hức. Ai quan tâm nếu họ "lạc đề" khi họ rất thường xuyên chính xác những gì người dùng đang tìm kiếm (và tìm kiếm thông qua các tìm kiếm trên web). Như thể các mod Stackoverflow đang cố gắng tạo lại xkcd 979 một cách có chủ ý .
Ville

3
@Ville Suy nghĩ của tôi cũng vậy. Downvote, chỉnh sửa và đóng cửa đã trở nên quá tích cực.
ankush981

2
Đối với bất cứ ai nhìn vào điều này bây giờ, khiếu nại của @ xiefei đã được giải quyết. SBT đã loại bỏ rất nhiều toán tử / cú pháp tùy chỉnh hơn và các câu lệnh trong tệp / sbt không còn cần phân tách khoảng trắng.
Grogs
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.