sbt와 Gradle 비교 [닫기]


110

나는 Scala에 뛰어 들었고 sbt를 발견했습니다. Java / groovy 프로젝트에서 Gradle에 매우 만족했으며 Gradle 용 스칼라 플러그인이 있다는 것을 알고 있습니다.

Scala 프로젝트에서 Gradle보다 sbt를 선호하는 이유는 무엇입니까?


어떤 의미에서 SBT는 Vim과 비슷합니다. 만약 당신이 그것을한다면, 당신은 기뻐할 것입니다. 그건 그렇고, maven과 lein도 있습니다 (클로저를 위해 만들어졌지만 스칼라에서도 작동합니다).
om-nom-nom 2011 년

18
SBT로 옮겨야한다는 부담감을 느끼지 마십시오. Scala 커뮤니티의 잘 알려진 구성원 중 일부는 Gradle을 사용합니다. 대신 Gradle을 대신 사용할 수 있다는 것을 알고 SBT를 실험으로 사용하십시오.
다니엘 C. 소브랄

6
모두 감사합니다 ... 귀하의 통찰력을 읽은 후 Gradle을 계속 사용하겠습니다. Maven을 남겨두고 JVM 공간에 대한 대부분의 빌드 도구 노력이 이루어질 것입니다.
Hans Westerbeek

10
이 질문이 여기에서 '의견 기반'으로 표시되는 것은 성가신 일입니다. 아마도 JVM 공간에서 항상 일하지 않는 사람들에 의해 (따라서 감독이 부족한 것입니다). 아래 답변은 사실이며 거룩한 전쟁주의가 없습니다.
Hans Westerbeek

4
아니요, 이러한 답변은 주로 의견이 아니라 테스트 가능한 사실에 대한 설명입니다. 이 질문 도움이되지 않는 답변을 얻을 있지만 실제로는 그렇지 않습니다. 도구 간의 실제 차이점에 대한 유용한 설명으로 열려 있어야합니다.
erickson

답변:


61

SBT와 Gradle의 주요 차이점 중 하나는 종속성 관리입니다 .

  • SBT : Ivy , 고정 된 버전 (예 : 1.5.2) 또는 최신 (또는 동적) 버전으로 제공 될 수있는 개정판.
    " Ivy Dependency "를 참조하십시오. Mark Harrah 가이 스레드 에서 자세히 설명
    하더라도 "-SNAPSHOT"메커니즘 지원이 문제가 될 수 있음을 의미합니다 .

캐시가 혼란 스러울 수 있다는 것은 사실이지만 Ivy가 스냅 샷 해결을 이해하지 못하는 것은 사실이 아닙니다. Eugene은 아마도 관리자 목록에있는 다른 스레드에서이 점을 설명했습니다. 0.12에서 해결 된 sbt의 자동 업데이트에 문제가 있습니다.

내가 아는 한 Ivy가 지원하지 않는 것은 Maven이하는 방식으로 스냅 샷을 게시하는 것입니다. 나는 이것을 다른 곳에서 언급했다고 생각하지만 누군가 상황을 개선하고 싶다면 Gradle 팀과 함께 노력하여 종속성 관리 코드를 재사용하는 것이 가장 좋다고 생각합니다.

아시다시피, Ivy 및 Maven 스냅 샷 종속성 문제는 Gradle이 결국 Ivy를 자체 종속성 관리 코드로 대체 한 이유 중 하나였습니다. 큰 일 이었지만 우리에게 많은 장점을 가져다주었습니다.

이 트윗 은 모든 상황이 미래에 발전 할 수 있다고 언급합니다.

Mark는 과거에 SBT에 Ivy 대신 Gradle을 사용하는 데 관심이 있다고 말했습니다.

(두 도구 모두 서로 배울 수 있음 )


1
내가 만난 가장 불편한 점은 sbt가 언급 될 때마다 다시 컴파일하지 않도록 규칙을 지정할 수 없다는 것입니다. Java 및 Scala에 대한 기본 제공 규칙에는이 기능이 있지만 사용자 지정 규칙을 작성하기 위해 노출되지 않습니다. 따라서 프로그램 파일이나 문서를 생성 할 때마다 그리고 jar 파일을 생성하더라도 소스 변경이 실제로 수행되었는지 여부에 관계없이 각 호출에서 작업이 수행됩니다. 심지어 메이크업 스마트 충분하다,하지만 SBT
ayvango

1
@ayvango 요즘 sbt의 경우는 아닙니다. 같은이 기능을 활용하여 많은 플러그인이 있습니다 안드로이드 SDK - 플러그인
dant3

해당 기능에 어떤 API가 사용되는지 알고 있습니까?
ayvango

그래서 이것은 maven & gradle과 비교할 때 ivy가 부족한 것입니까? 이상합니다
tribbloid

53

저에게 SBT의 주요 기능은 다음과 같습니다.

  • 빠른 컴파일 (보다 빠름 fsc).
  • 연속 컴파일 / 테스트 :이 명령 ~test은 수정 사항을 저장할 때마다 프로젝트를 다시 컴파일하고 테스트합니다.
  • 여러 스칼라 버전에서 교차 컴파일 및 교차 게시.
  • 올바른 스칼라 버전 호환성으로 종속성을 자동으로 검색합니다.

단점은 다음과 같습니다.

  • 신규 사용자를 실망시키는 경향이있는 상형 문자 구문 (특히 Java에서 온 경우)
  • "작업"을 정의하는 쉬운 방법이 없습니다. 특별한 빌드 절차가 필요한 경우 플러그인을 찾거나 직접 플러그인을 작성해야합니다.

Scala의 하위 바이너리 비 호환성 문제로 인해 크로스 컴파일 / 게시 기능이 필요했거나 필요 했습니까?
Hans Westerbeek

1
예. 그리고 이러한 문제는 Scala 2.10으로 이동할 때 다시 발생할 수 있습니다.
패러다임

1
추가 할 두 가지 차이점이 더 있습니다. * SBT에서는 종속성, IMO를 자체 관리하는 것이 더 쉽습니다. * SBT 테스트 러너가 더 빨라 보입니다. 여기에 교활한 동시성이 있다고 생각하지만 추측하고 있습니다. SBT는 더 유능하지만 덜 성숙한 제품처럼 보입니다.
Rick-777

25
'상형 문자 구문'단점에 +1. 그것이 SBT에 대한 가장 큰 불만입니다. 항상 리드를 오버로드 연산자 남용 : - /
론 달 그렌

7
비밀스러운 SBT 구문은 스칼라에서 최악의 결과를 가져옵니다. Gradle은 잘 고안된 도메인 모델과 간단한 구문을 기반으로합니다.
nemoo

40

sbt는 Scala DSL이고 Scala는 일류 시민이므로 원칙적으로 잘 맞는 것 같습니다.

그러나 sbt는 버전간에 호환되지 않는 주요 변경 사항으로 인해 작업에 대한 올바른 작동 플러그인을 찾고 작동하도록하기가 어렵습니다.

나는 sbt가 해결 한 것보다 더 많은 문제를 일으키고 있었기 때문에 개인적으로 포기했습니다. 나는 실제로 gradle로 전환했습니다.

그림을 이동.


2
내가 아는 한, sbt가 0.7.x에서 0.1.x로 전환했을 때
om-nom-nom

1
sbt 0.11.2 용 플러그인을 사용하고 sbt 0.12로 이동하면 플러그인 작성자가 새 버전을 컴파일하거나 직접 수행 할 때까지 기다려야합니다. idea-sbt가 한 예입니다.
fmpwizard

4
@fmpwizard sbt 0.12 라인은 아직 실현되지 않았습니다 ... FUD 확산을 중지하십시오.
패러다임

3
sbt는 사용할 수없는 것이 아니라 우리 팀이 사용합니다. 그러나 내 의견은 "...하지만 sbt는 버전간에 호환되지 않는 주요 변경 사항으로 인해 작업에 대한 올바른 작동 플러그인을 찾고 작동하도록하기가 어렵습니다 ..."라는이 답변을 지원하는 것이 었습니다. , 저는 scct 플러그인을 사용할 수 없습니다. 수정해야했습니다 (작은 변경 사항이지만 팀 전체가 액세스 할 수 있도록 어딘가에 게시해야했습니다). 합당한 이유가없는 고통입니다.
fmpwizard

3
Gradle을 사용하여 다른 Scala 버전에 대한 교차 컴파일을 수행 할 수 있습니까?
Machisuji

4

저는 gradle을 처음 접하고 sbt를 처음 사용합니다. 지금까지 sbt에 대해 정말 좋아하는 것은 대화 형 콘솔입니다. 무슨 일이 일어나고 있는지 더 잘 이해하기 위해 '검사'와 같은 명령을 사용할 수 있습니다. AFAIK gradle은 이와 같은 atm을 제공하지 않습니다.


-11

Sbt와 gradle은 둘 다 정적으로 형식화 된 언어를 기반으로하지만 sbt에는 몇 가지 장점이 있습니다.

  • 더 나은 플러그인 지원, 특히 자동 플러그인
  • 작업 생성 및 작업 간 종속성 관리
  • sbt는 증분 빌드를 지원하고 대부분의 sbt 자체가 스칼라로 작성되고 sbt 빌드 정의가 스칼라로 작성된다는 점에서 특히 스칼라 프로젝트에 적합합니다.
  • sbt는 많은 유용한 내장 작업과 함께 상호 쉘을 지원합니다.
  • sbt 기본 수명주기는 매우 유용하며 초보자도 적은 노력으로 시작할 수 있습니다.

1
Gradle은 정적으로 형식화 된 언어가 아닌 groovy를 기반으로합니다.
Vistritium

Gradle은 작업 간의 종속성 관리를 수행하며 작업을 생성하는 것은 가능한 한 쉽습니다 .Groovy, Java, gradle 플러그인 등을 사용할 수있는 gradle보다 플러그인을 작성하는 것이 더 쉬울 수있는 방법을 모릅니다.
Johnride
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.