Scala 프로젝트에서 sbt vs maven 사용의 장단점


138

스칼라에 가장 적합한 빌드 도구는 무엇입니까? 그들 각각의 장단점은 무엇입니까? 프로젝트에서 어떤 것을 사용할지 어떻게 결정합니까?


5
다중 모듈 빌드에 대한 탁월한 지원으로 인해 Maven에서 Scala 프로젝트를 위해 Gradle로 전환했습니다. SBT에 대한 트위터 경험 은 그들에 의해 "맹목적인 고통"으로 묘사되며 그들은 그것을 멀어 지려고 노력하고있다 (그 과정에서 Maven을 멈춤 간격으로).
Ben Manes

24
또 다른 멋진 비공개 질문 ...
Cedric H.

14
아주 많은 좋은 질문들이 막 닫혔습니다. 나는이 사람들에게 질문을 닫기로 결정하는 자의 힘을주는 사람을 모른다. 나는 그들이 더 가까이 있는지 아닌지주의를 기울이지 않습니다.
user1888243

2
동의하다. 다행히이 질문이 끝나기 전에 2 개의 답변이 있습니다. 이 질문을 마무리하기 위해 투표하는 사람들에게 불쌍한 ...
hqt

답변:


83

우리는 Maven을 사용하여 CI 서버와 잘 통합되어 있기 때문에 직장에서 Scala 프로젝트를 구축하고 있습니다. 물론 빌드를 시작하기 위해 쉘 스크립트를 실행할 수도 있지만, Maven에서 CI로 가고 싶은 다른 많은 정보가 있습니다. 그것이 Scala 프로젝트에 Maven을 사용한다고 생각할 수있는 유일한 이유입니다.

그렇지 않으면 SBT를 사용하십시오. 동일한 종속성 (실제로 maven, IMHO의 가장 중요한 부분)에 액세스 할 수 있습니다. 또한 증분 컴파일을 가져옵니다. 프로젝트 내부에서 쉘을 시작하는 기능도 훌륭합니다.

ScalaMock은 SBT에서만 작동하며 Java 모의 라이브러리가 아닌 SBT를 사용하고 싶을 것입니다. 또한 빌드 파일에 전체 스칼라 코드를 작성할 수 있으므로 SBT를 확장하는 것이 훨씬 쉬우므로 모조를 작성하는 모든 리가 마롤을 수행 할 필요가 없습니다.

즉, CI 서버와의 긴밀한 통합이 필요하지 않은 경우 SBT 만 사용하십시오.


21
위의 내용에 동의하지 않지만 ScalaMock 3 작성 과정에 있다는 것을 지적하고 싶었습니다 .Scalaock 3 의 주요 목표 중 하나는 다른 빌드 시스템을 더 쉽게 지원하는 것입니다.
Paul Butcher

1
완성을 위해 ScalaMock 2 는 생성 된 모의 객체를 사용할 필요가없는 한 (즉, 특성 / 인터페이스를 모의 해야하는 한) 모든 빌드 시스템 (단지 단지 병)에서 잘 작동한다는 점을 언급 할 가치가 있습니다. ).
Paul Butcher


3
왜 그들은 maven에 대한 증분 컴파일을 작성하지 않았습니까? IMHO, sbt는 치료되지 않은 NIH 증후군의 대표적인 예입니다
.

1
SBT로 인해 CI에 문제가 발생하는 이유는 무엇입니까?
Daniel

21

문제는 단지 많은 의견을 생성 할 위험이있다. 요구 사항 목록이나 환경, 이전 지식 등에 대한 설명을 명확하게 작성하는 것이 좋습니다.

이 스칼라 메일 링리스트 쓰레드 에는 더 많은 의견 있습니다.

내 2c는 : 특정 요구 사항이 없으면 sbt와 함께하십시오.

  • 간단한 프로젝트의 경우 완전히 힘들 수 있습니다 (종속성이있을 때까지 빌드 파일이 필요하지 않습니다)
  • 스칼라 오픈 소스 프로젝트에서 일반적으로 사용됩니다. 다른 사람들의 프로젝트를 엿봄으로써 구성에 대해 쉽게 배울 수 있습니다. 또한 많은 프로젝트는 sbt를 사용한다고 가정 하고이를 프로젝트에 대한 종속성으로 추가하기위한 기성품 복사 + 붙여 넣기 명령 을 제공합니다.
  • IntelliJ IDEA를 사용하면 완전히 통합 될 수 있습니다. 당신은 할 수 IDEA 사용 SBT가 신속에 SBT를 사용할 수 있습니다 반대 지속적으로 프로젝트를 컴파일, 그리고 그 반대를 IDEA 프로젝트를 생성합니다 . 마지막은 부 버전에서 부 버전으로 충돌하는 다른 라이브러리에 따라 '스냅 샷'주기에있는 경우 매우 유용합니다. 프로젝트를 닫고 빌드 파일에서 버전을 업데이트 한 다음 다시 실행하십시오. gen-idea작업을 수행하고 프로젝트를 다시 엽니 다 : 업데이트 완료.
  • 당신이 필요합니다 대부분의 작업 (와 준비가되어 compile, test, run, doc, publish-local, console) - (가) console가장 좋은 기능 중 하나입니다.
  • 어떤 사람들은 의존성이 GitHub에서 직접 가져온 소스 리포지토리가 될 수있는 기능을 강조합니다. 나는 이것을 사용하지 않았으므로 여기에 주석을 달 수 없다.

어떤 사람들은 의존성 관리에 Ivy를 사용하기 때문에 sbt를 싫어합니다 (장단점에 대해서는 언급 할 수 없지만 대부분 비 이슈입니다). XML 대신 스칼라 DSL. 어떤 사람들은 sbt의 형식이 v0.7에서 v0.10으로 변경된 것에 실망했지만 분명히 처음부터 시작해도 마이그레이션은 영향을 미치지 않습니다.


27
나는 .sbt 및 .scala 정의 형식을 지원하지만 상징적 연산자를 남용하고 멍청한 결정을 다른 위치에 배치하고 .sbt의 문은 최소한 빈 줄로 분리해야하기 때문에 sbt가 싫어. 현재 sbt가 개선되고 있지만 충분하지 않습니다. 내가 가장 그리워하는 것은 모든 sbt 기능을 포함하여 한 줄씩 설명 된 완전한 (최소에서 실제 복잡한) .sbt / .scala 샘플 파일입니다. 즉, Maven이 훨씬 더 많이 빨기 때문에 매일 sbt를 사용합니다.
xiefei

6
이 질문이 끝났다는 것이 너무 나쁘지만, 사실에도 차이가 있다고 확신합니다. 예를 들어 SBT에 관한 Manning 책에서 발췌 한 내용은 다음과 같습니다. sbt를 사용하면 작업간에 명시적인 종속성을 지정해야하므로 sbt가 작업을 병렬로 BY DEFAULT로 병렬로 실행할 수 있습니다. 작업 A가 B에 의존하고 C도 B에 의존하는 경우 sbt는 작업 B를 실행 한 다음 A와 C를 동시에 실행합니다. " 이 의견이 독자들에게 도움이 되길 바랍니다.
jhegedus

19
이 스레드가 매우 유용하다는 것을 알았습니다. 나는 종종 Stackoverflow 중재자가 너무 열심히 스레드를 닫는다 고 생각합니다. 사용자가 원하는 내용을 정확히 찾을 때 (웹 검색을 통해 찾을 때) "주제를 벗어난"사람이 누구인지 걱정합니다. 마치 스택 오버 플로우 모드가 의도적으로 xkcd 979를 다시 만들려고하는 것과 같습니다 .
Ville

3
@ 빌 내 생각도. 다운 보팅, 편집 및 닫기가 너무 공격적으로되었습니다.
ankush981

2
현재 이것을보고있는 사람이라면 @xiefei의 불만이 해결되었습니다. SBT는 더 많은 사용자 정의 연산자 / 구문을 삭제했으며 / sbt 파일의 명령문은 더 이상 공백을 구분할 필요가 없습니다.
Grogs
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.