문제

Java를 대상으로 하는 또 다른 빌드 도구는 실제로 무엇을 제공합니까?

다른 도구 대신 Gradle을 사용한다면 그 이유는 무엇입니까?

도움이 되었습니까?

해결책

나는 사용하지 않는다 gradle 분노로 (지금까지 장난감 프로젝트) 저자는 지금까지 장난감 프로젝트에서만 Gradle을 사용했음을 의미합니다. Gradle은 장난감 프로젝트가 아닙니다 - 의견 참조, 그러나 나는 그것을 사용하는 이유는 개미와 Maven의 좌절 때문일 것이라고 말하고 싶습니다.

내 경험상 개미는 종종 쓰기 전용입니다 (예, 글을 쓸 수 있다는 것을 알고 있습니다. 아름답고 모듈 식적이고 우아한 빌드S, 그러나 사실은 대부분의 사람들이 그렇지 않습니다). 사소한 프로젝트의 경우 마인드 굽힘이되고 복잡한 빌드가 진정으로 휴대 할 수 있도록 큰주의를 기울입니다. 명령적인 특성은 빌드 간 구성을 복제 할 수 있습니다 (매크로는 여기서 도움이 될 수 있음).

Maven은 반대의 접근 방식을 취하며 Maven 라이프 사이클과 완전히 통합 될 것으로 기대합니다. 숙련 된 ANT 사용자는 Maven이 Ant에있는 많은 자유를 제거함에 따라 특히이 문제를 발견합니다. 예를 들어 a가 있습니다 소나 타입 블로그 그것은 많은 Maven 비판과 그들의 반응을 열거하고 있습니다.

Maven 플러그인 메커니즘은 매우 강력한 빌드 구성을 허용하며 상속 모델은 전체 엔터프라이즈에 대한 빌드 구성을 캡슐화하는 작은 상위 POM 세트를 정의 할 수 있으며 개별 프로젝트는 해당 구성을 상속 할 수있어 가벼운 상태를 유지할 수 있음을 의미합니다. Maven 구성은 매우 장점입니다 (Maven 3 은이 문제를 해결하겠다고 약속하지만), "Maven Way가 아닌"작업을 수행하려면 플러그인을 작성하거나 해킹 개미 통합을 사용해야합니다. 참고 나는 Maven 플러그인을 작성하는 것을 좋아하지만 많은 사람들이 관련된 노력에 반대 할 것이라는 점에 감사드립니다.

Gradle은 Ant와 Maven 사이의 스위트 스팟을 쳤다. 사용합니다 여자 이름의존성 해상도에 대한 접근 방식. 구성에 대한 협약을 허용하지만 일류 시민으로서 ANT 작업도 포함됩니다. 또한 기존 Maven/Ivy 저장소를 사용할 수 있습니다.

따라서 ANT/Maven Pain Points에 부딪 히면 Gradle을 시도해 볼 가치가있을 것입니다. 제 생각에는 알려지지 않은 문제를 거래하는 것이 아니라면 여전히 남아 있어야합니다. 푸딩의 증거는 식사 중이므로 제품이 조금 더 성숙하고 다른 사람들이 어떤 꼬임을 다림질 할 때까지 판단을 예약 할 것입니다 (이유 때문에 출혈 가장자리라고 부릅니다). 나는 여전히 내 장난감 프로젝트에서 그것을 사용하고 있습니다. 항상 옵션을 알고있는 것이 좋습니다.

다른 팁

Gradle은 여러 목적으로 사용될 수 있습니다. 개미보다 훨씬 더 나은 스위스 군용 나이프 - 특히 멀티 프로 젝트 빌드에 중점을 둡니다.

우선, Gradle은 종속성 프로그래밍 도구로 프로그래밍 도구이기도합니다. Gradle을 사용하면 설정에서 임의의 작업을 실행할 수 있으며 Gradle은 선언 된 모든 종속성이 적절하고 적시에 실행되도록합니다. 코드는 모든 종류의 레이아웃 (트리, 플랫, 산란, ...)에서 많은 디렉토리에 퍼질 수 있습니다.

Gradle에는 평가와 실행의 두 가지 단계가 있습니다. 기본적으로 평가하는 동안 Gradle은 볼 수있는 디렉토리에서 빌드 스크립트를 찾고 평가합니다. 실행 중 Gradle은 작업 상호 의존성을 고려하여 평가 중에로드 된 작업을 실행합니다.

이러한 종속성 프로그래밍 기능 외에도 Gradle은 Apache Ivy와의 인터 레이트를 통해 프로젝트 및 JAR 의존성 기능을 추가합니다. 아시다시피 아이비는 Maven이라고 말하는 것보다 훨씬 강력하고 의견이 적은 의존성 관리 도구입니다.

Gradle은 프로젝트와 프로젝트와 항아리 간의 종속성을 감지합니다. Gradle은 Ibiblio One 또는 자신의 리포지토리와 같이 Maven 리포지토리 (다운로드 및 업로드)와 함께 작동하지만 귀하가 가질 수있는 기타 유형의 저장소 인프라도 지원합니다.

다중 프로젝트 빌드에서 Gradle은 적응력이 있으며 빌드의 구조 및 아키텍처에 적응할 수 있습니다. Maven에 필요한대로 구조 나 아키텍처를 빌드 도구에 조정할 필요가 없습니다.

Gradle은 당신의 길을 가지지 않기 위해 열심히 노력합니다. Maven은 거의하지 않습니다. 컨벤션은 좋지만 유연성이 좋습니다. Gradle은 Maven보다 더 많은 기능을 제공하지만 대부분의 경우 Gradle은 Maven에서 멀리 떨어진 고통스러운 전환 경로를 제공 할 것입니다.

이것은 약간 논란의 여지가 있지만 Gradle은 본격적인 프로그래밍 언어라는 사실을 숨기지 않습니다.

Ant + Ant-Contrib는 본질적으로 아무도 프로그래밍하고 싶지 않은 튜링 완전한 프로그래밍 언어입니다.

Maven은 완전히 선언적이 되려고 노력하고 논리가 필요한 경우 플러그인을 작성하고 컴파일하도록 강요하려고합니다. 또한 완전히 융통성이없는 프로젝트 모델을 부과합니다. Gradle은 다음과 같은 모든 도구를 최선으로 결합합니다.

  • 컨벤션-오버 컨퍼런스 (Ala Maven)를 따르지만 원하는 범위 내에서만
  • ANT와 같이 유연한 사용자 정의 작업을 작성할 수 있습니다.
  • 개미와 Maven보다 우수한 멀티 모듈 프로젝트 지원을 제공합니다.
  • 80%를 쉽게 만들고 20%가 가능한 DSL이 있습니다 (80%를 쉽게하고 10%가 효과적으로 불가능하게하는 다른 빌드 도구와 달리).

Gradle은 아직 사용하지 않은 가장 구성 가능하고 유연한 빌드 도구입니다. DSL과 구성과 같은 개념을 배우려면 약간의 투자가 필요하지만, 말도 안되고 완전히 구성 가능한 JVM 빌드 도구가 필요하면 이길 수 없습니다.

Gradle은 개미와 Maven을 모두 결합하여 두 프레임 워크에서 최선을 다합니다. Maven의 구성, 종속성 관리 및 플러그인에 대한 개미 및 컨벤션의 유연성.

따라서 Maven과 같은 표준 Java 빌드를 원하지만 테스트 작업은 몇 가지 사용자 지정 단계를 수행해야합니다.

build.gradle :

apply plugin:'java'
task test{
  doFirst{
    ant.copy(toDir:'build/test-classes'){fileset dir:'src/test/extra-resources'}
  }
  doLast{
    ...
  }
}

또한 그것은 Groovy Syntax를 사용하여 Ant/Maven의 XML보다 훨씬 더 많은 표현력을 제공합니다.

그것은 개미의 슈퍼 세트입니다 - 당신은 gradle의 모든 개미 작업을 더 좋고 그루비와 같은 구문 (즉)으로 사용할 수 있습니다.

ant.copy(file:'a.txt', toDir:"xyz")

또는

ant.with{
  delete "x.txt"
  mkdir "abc"
  copy file:"a.txt", toDir: "abc"
}

우리는 Gradle을 사용하고 Maven과 Ant에서 그것을 선택했습니다. Ant는 우리에게 완전히 유연성을 제공했으며 Ivy는 Maven보다 더 나은 의존성 관리를 제공하지만 멀티 프로 젝트 빌드에 대한 지원은 크지 않습니다. 당신은 다중 프로젝트 빌드를 지원하기 위해 많은 코딩을하게됩니다. 또한 일부 빌드별로 확신을 갖는 것은 좋으며 빌드 스크립트를보다 간결하게 만듭니다. Maven을 사용하면 컨벤션별로 빌드가 너무 멀리 만들어지고 빌드 프로세스를 사용자 정의하는 것이 해킹이됩니다. 또한 Maven은 모든 프로젝트를 인공물을 게시합니다. 때로는 프로젝트가 하위 프로젝트로 분할되어 있지만 모든 하위 프로젝트를 구축하고 버전으로 만들기를 원합니다. 실제로 Maven이 설계된 것이 아닙니다.

Gradle을 사용하면 Maven의 협약에 의해 개미의 유연성을 가질 수 있습니다. 예를 들어, 기존의 빌드 라이프 사이클을 자신의 작업으로 확장하는 것은 사소한 일입니다. 그리고 원하지 않는다면 컨벤션을 사용해야합니다. 그루비는 XML보다 코드가 훨씬 좋습니다. Gradle에서는 각각의 리포지토리에 인공물을 게시 할 필요없이 로컬 파일 시스템의 프로젝트 간의 종속성을 정의 할 수 있습니다. 마지막으로 Gradle은 Ivy를 사용하므로 종속성 관리가 우수합니다. 지금까지 저에게 유일한 단점은 성숙한 일식 통합이 부족하다는 것입니다. 그러나 Maven의 옵션은 그리 좋지 않습니다.

이것은 아닙니다 나의 대답하지만, 그것은 확실히 나와 공명합니다. 그것은 ~로부터 2012 년 10 월부터 ThinkWorks의 기술 레이더:

ANT 및 Maven과 같은 XML 기반 빌드 도구로 피로를 일으켰습니다. 구문 문제는 세대를 통해 처리 될 수 있지만 플러그인 아키텍처는 프로젝트가 더욱 복잡해지면서 빌드 도구가 우아하게 성장할 수있는 능력을 심각하게 제한합니다. 우리는 플러그인이 잘못된 추상화 수준이라고 생각하고 Gradle 및 Rake와 같은 언어 기반 도구를 선호합니다. 왜냐하면 그들은 더 미세한 추상화와 장기적으로 유연성을 제공하기 때문입니다.

Gradle은 소프트웨어 구축/조립에 재미를 더했습니다.나는 내 경력 전체에서 소프트웨어를 구축하는 데 Ant를 사용했으며 항상 개발 작업의 실제 "빌드잇" 부분을 필요악으로 간주해 왔습니다.몇 달 전 우리 회사는 바이너리 저장소(VC에 항아리 체크인)를 사용하지 않는 것에 지쳤고 나에게 이를 조사하는 임무가 주어졌습니다.개미 위에 볼트로 고정할 수 있기 때문에 담쟁이덩굴로 시작했지만 내가 원하는 대로 내가 만든 인공물을 게시하는 데 큰 행운이 없었습니다.나는 maven을 선택하고 xml로 해킹하여 몇 가지 간단한 도우미 라이브러리에 대해 훌륭하게 작업했지만 배포 준비가 된 응용 프로그램을 번들로 묶는 데 심각한 문제가 발생했습니다.플러그인을 검색하고 포럼을 읽는 데 꽤 오랜 시간이 걸렸고 사용하기 힘든 다양한 플러그인에 대한 수조 개의 지원 항아리를 다운로드하게 되었습니다.마침내 나는 gradle을 선택했습니다. (이 시점에서 꽤 씁쓸해졌고 "이렇게 어렵지는 않을 것 같아요!"라고 짜증이 났습니다.)

하지만 첫날부터 기분이 좋아지기 시작했어요.나는 어딘가에 가고 있었다.첫 번째 개미 모듈을 마이그레이션하는 데 2시간 정도 걸렸고 빌드 파일은 기본적으로 아무것도 아니었습니다.한 화면에 쉽게 장착할 수 있습니다.가장 큰 "와우"는 다음과 같습니다.짓다 스크립트 XML에서 그게 얼마나 어리석은 일입니까?하나의 종속성을 선언하는 데 한 행이 필요하다는 사실은 나에게 매우 매력적입니다. -> 한 페이지에서 특정 프로젝트에 대한 모든 종속성을 쉽게 볼 수 있습니다.그때부터 나는 계속해서 노력해 왔으며 지금까지 직면한 모든 문제에 대해 간단하고 우아한 해결책이 있었습니다.제 생각에는 다음과 같은 이유가 있습니다.

  • Groovy는 Java 개발자에게 매우 직관적입니다.
  • 문서는 훌륭하고 훌륭합니다
  • 유연성은 끝이 없다

이제 저는 빌드 프로세스에 추가할 새로운 기능을 생각해내느라 하루를 보냅니다.얼마나 아픈가요?

기본 빌드를 관리하는 것도 훨씬 쉽습니다. 개미와 메이븐은 효과적으로 Java 전용입니다. 일부 플러그인은 일부 기본 프로젝트를 처리하려고 시도하지만 효과적인 작업을 수행하지는 않습니다. ANT 작업은 기본 프로젝트를 컴파일하는 것을 작성할 수 있지만 너무 복잡하고 어색합니다.

우리는 JNI와 다른 많은 기본 비트와 함께 Java를합니다. Gradle은 개미 혼란을 상당히 단순화했습니다. 우리가 기본 프로젝트에 의존성 관리를 소개하기 시작했을 때 그것은 지저분했습니다. 우리는 Maven에게 그렇게 할 수 있었지만 동등한 Gradle 코드는 Maven에서 필요한 것의 작은 부분이었으며 사람들은 Maven Gurus가되지 않고 그것을 읽고 이해할 수있었습니다.

나는 Ed Staub에 부분적으로 동의합니다. Gradle은 Maven에 비해 더 강력하며 장기적으로 더 많은 유연성을 제공합니다.

Maven에서 Gradle로 이동하는 평가를 수행 한 후, 우리는 Gradle에서 발생한 두 가지 문제에 대해 Maven 자체를 고수하기로 결정했습니다 (속도는 Maven보다 느리고 프록시가 작동하지 않았습니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top