Gradle 래퍼 파일을 생성하는 방법 / 언제?


212

Gradle Wrapper의 작동 방식을 이해하려고합니다. 많은 소스 저장소에서 다음 구조를 봅니다.

projectRoot/
    src/
    build.gradle
    gradle.properties
    settings.gradle
    gradlew
    gradlew.bat
    gradle/
        wrapper/
            gradle-wrapper.jar
            gradle-wrapper.properties

내 질문 :

  1. 어떻게 / 하나가 생성 않을 때 gradlew/ gradlew.bat? 프로젝트가 처음 생성 될 때 한 번만 생성해야합니까? 변경 사항을 커밋 / 푸시 할 때마다 생성합니까? 그리고 그들은 어떻게 생성됩니까?
  2. 위의 동일한 질문이지만 gradle/wrapper/*파일 ( gradle-wrapper.jargradle-wrapper.properties)에 대해?
  3. 때로는 *.gradle프로젝트 gradle디렉토리 안에 다른 파일이 있습니다 . 이러한 추가 Gradle 파일은 무엇이며 무엇을 나타내거나 수행합니까? 맞춤 플러그인?
  4. 들어가는 속성과 settings.gradle정의해야 할 속성의 차이점은 무엇입니까 gradle.properties?

답변:


251
  1. 프로젝트에서 사용하는 Gradle 버전을 변경하고 싶을 때 한 번 생성합니다. 너무 자주 생성 할 필요가 없습니다. 여기 문서가 있습니다. 파일 에 wrapper작업을 추가 build.gradle하고이 작업을 실행하여 래퍼 구조를 얻으십시오.

    래퍼를 생성하려면 Gradle을 설치 해야합니다 . g-ecosystem 아티팩트를 관리하기위한 훌륭한 도구는 SDKMAN입니다! . gradle wrapper를 생성하려면 다음 코드를 build.gradle파일에 추가 하십시오.

    task wrapper(type: Wrapper) {
       gradleVersion = '2.0' //version required
    }
    

    다음을 실행하십시오.

    gradle wrapper
    

    직무. 결과 파일을 SCM (예 : git)에 추가하면 Gradle Wrapper를 사용할 때 모든 개발자가 동일한 버전의 Gradle을 갖게됩니다.

    Gradle 2.4 이상에서는 전용 작업을 추가하지 않고도 래퍼를 설정할 수 있습니다.

    gradle wrapper --gradle-version 2.3
    

    또는

    gradle wrapper --gradle-distribution-url https://myEnterpriseRepository:7070/gradle/distributions/gradle-2.3-bin.zip
    

    모든 세부 사항은 여기 에서 찾을 수 있습니다

Gradle에서 3.1 --distribution-type옵션을 사용할 수도 있습니다. 옵션은 binary 및 allbin 입니다. 모두 소스 코드와 문서를 추가로 포함합니다. IDE를 사용하면 모든 것이 더 좋으므로 편집기가 더 잘 작동합니다. 단점은 빌드가 더 오래 지속될 수 있고 (CI 서버에서 무의미한 데이터를 더 다운로드해야 함) 더 많은 공간이 필요하다는 것입니다.

  1. 이들은 Gradle Wrapper 파일입니다. 특정 버전에 대해 한 번 생성하고 버전 제어에 추가해야합니다. Gradle Wrapper의 버전을 변경해야하는 경우 build.gradle(1.) 의 버전을 변경 하고 파일을 재생성하십시오.

  2. 자세한 예를 들어보십시오. 이러한 파일은 다중 모듈 프로젝트, 책임 분리, 약간 수정 된 스크립트 등 여러 가지 용도로 사용될 수 있습니다.

  3. settings.gradle프로젝트의 구조 (모듈, 이름 등)를 담당하는 반면 gradle.properties프로젝트 및 Gradle의 외부 세부 정보 (버전, 명령 줄 인수 -XX, 속성 등)에 사용됩니다


@Opal에게 감사드립니다 (+1)-# 3에 대한 구체적인 예를 보려면 Netflix-Eureka를 참조하십시오 . 이 Gradle 파일은 무엇입니까?!?
smeeb

알았어 내가 아는 한 Netflix의 개발자는 하나의 큰 build.gradle스크립트를 여러 개의 짧은 스크립트로 나누고 하나의 특정 목적 스크립트에 전념했습니다. gradle dir 아래에있는 스크립트 를 기본 build.gradle파일에 적용 할 수 있으므로 github.com/Netflix/eureka/blob/master/build.gradle을보십시오 . 이러한 모듈을 넣는 위치 는 귀하가 선택한 것입니다. 그게 전부입니다. 답변이 만족 스럽다면 답변을 수락하십시오. :)
Opal

1
또 다른 유용한 명령 줄 옵션은 다음 --distribution-type과 같습니다.gradle wrapper --gradle-version 4.3.1 --distribution-type ALL
heenenee

1
감사합니다 @heenenee, 내 답변에 추가합니다.
오팔

팁 : Android Studio의 설치 폴더에는 Gradle이 있습니다.
TWiStErRob

29

Gradle 래퍼 생성

프로젝트 빌드 gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

// Running 'gradle wrapper' will generate gradlew - Getting gradle wrapper working and using it will save you a lot of pain.
task wrapper(type: Wrapper) {
    gradleVersion = '2.2' 
}

// Look Google doesn't use Maven Central, they use jcenter now.
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.1'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

그런 다음 명령 줄 실행

gradle wrapper

시스템에 gradle이 없으면 설치하십시오. 그렇지 않으면 위의 작동하지 않습니다. Mac에서는 Homebrew를 통해 설치하는 것이 가장 좋습니다.

brew install gradle

랩퍼 태스크를 성공적으로 실행하고 생성 한 후에는 gradlew시스템 gradle을 사용하지 마십시오. 그것은 당신에게 많은 두통을 저장합니다.

./gradlew assemble

위에서 본 gradle 플러그인은 어떻습니까?

com.android.tools.build:gradle:1.0.1

버전을 최신 버전으로 설정해야 하며 도구 페이지를 확인하고 그에 따라 버전을 편집 할 수 있습니다 .

Android Studio에서 생성 한 내용 확인

gradle과 최신 Android Studio의 추가로 프로젝트 레이아웃이 크게 변경되었습니다. 오래된 프로젝트가 있다면 최신 Android Studio로 깨끗한 프로젝트를 만들고 Google이 표준 프로젝트로 간주하는 것을 확인하는 것이 좋습니다.

Android Studio에는 이전 프로젝트를 가져 오기위한 기능이있어 도움이 될 수도 있습니다.


gradleVersion = '2.2'의는 taskWrapper내가 래퍼를 생성 원하는 어떤 버전, 올바른 사용할 수 있습니까? 최신 버전의 gradle 일 필요는 없습니까?
raffian

1
2 시리즈 gradle로 돌아갈 수 있다고 가정합니다. 2.x 이전에는 확실하지 않지만 절대 최신 버전을 따를 필요는 없습니다.
카메론 로웰 팔머

18

Gradle 2.4부터는 파일에 gradle wrapper --gradle-version X.X작업을 추가하지 않고도 특정 버전의 Gradle 래퍼를 구성 할 수 있습니다 build.gradle. 다음에 래퍼를 사용하면 해당 Gradle 배포판이 일치하도록 다운로드됩니다.


10

당신은 소스와 문서를 다운로드 Gradle을 원하는 경우, Gradle을-wrapper.properites에 구성된 기본 배포 URL이 need.It는 만족하지 않습니다 https://services.gradle.org/distributions/gradle-2.10-bin.zip , 하지 https://services.gradle.org/distributions/gradle-2.10-all.zip 당신이 전체 Gradle을 다운로드 할 전체 URL이 안드로이드 Studio.If으로 IDE에 의해 제안 .This,이 같은 래퍼 작업을 구성 할 수 있습니다 :

task wrapper(type: Wrapper) {
    gradleVersion = '2.13'
    distributionUrl = distributionUrl.replace("bin", "all")
}

1
최근은 Gradle을 빌드로 (하지 않도록 정확히 어느) - 오히려 수동으로 URL을 다시 작성하는 것보다, 같은 폐쇄에 붙박이 명령을 사용하여 아마도 최선의 방법 : distributionType = Wrapper.DistributionType.ALL
데이브 자작 나무

6

이것은 Gradle에게 래퍼를 업그레이드하여 소스 코드를 포함하는 라이브러리의 배포 버전을 가져 오도록 지시하는 데 사용하는 명령입니다.

./gradlew wrapper --gradle-version <version> --distribution-type all

배포 유형을 "all"로 지정하면 Gradle이 개발 환경에서 사용할 소스 파일을 다운로드 할 수 있습니다.

찬성 :

  • IDE는 소스 코드에 즉시 액세스 할 수 있습니다. 예를 들어 Intellij IDEA는 소스 배포를 포함하도록 빌드 스크립트를 업데이트하라는 메시지를 표시하지 않습니다 (이 명령이 이미 수행했기 때문에)

단점 :

  • 소스 코드를 다운로드하기 때문에 더 길고 큰 빌드 프로세스입니다. 이는 소스 코드가 필요하지 않은 빌드 또는 CI 서버의 시간 / 공간 낭비입니다.

Gradle에게 빌드 서버에서 소스를 다운로드하지 않도록 지시하는 명령 행 옵션에 대해 알고 있다면 다른 의견을 제시하거나 제공하십시오.


1
이 설정이 라이브러리에 관한 것입니까? 공식 문서는 달리 말하지 않고 래퍼 자체 만 참조합니다. "래퍼에서 사용할 Gradle 배포 유형." docs.gradle.org/current/dsl/…
Thorsten Schöning

2
  1. 한 번 생성하지만 새로운 기능이나 플러그인에서 새로운 gradle 버전이 필요한 것이 있으면 업데이트하십시오.

    가장 쉬운 업데이트 방법 : Gradle 2.2부터는 전체 또는 바이너리 Gradle 배포를 다운로드하고 추출하여 다음을 실행할 수 있습니다.

    $ <pathToExpandedZip>/bin/gradle wrapper
    

    작업을 정의 할 필요는 없지만 일종의 build.gradle파일이 필요할 수 있습니다.

    이 업데이트하거나 만듭니다 gradlewgradlew.bat뿐만 아니라 같은 래퍼 gradle/wrapper/gradle-wrapper.properties와는 gradle-wrapper.jarGradle을의 현재 버전, 포장을 제공 할 수 있습니다.

  2. 그것들은 모두 래퍼의 일부입니다.

  3. 일부 build.gradle파일은 하위 프로젝트 또는 모듈 인 하위 디렉토리의 다른 파일 또는 파일을 참조합니다. 약간 복잡해 지지만 하나의 프로젝트가 있으면 기본적으로 하나의 파일이 필요합니다.

  4. settings.gradle프로젝트, 모듈 및 기타 종류의 이름 및 설정을 처리하고, gradle.properties원하는 경우 gradle 파일에 대해 재사용 가능한 변수를 구성하고 원하는 경우 더 명확하다고 생각합니다.


2

4.8에서 gradle 내장 작업이 더 이상 사용되지 않으므로 아래에서 시도하십시오

wrapper {
   gradleVersion = '2.0' //version required
}

실행

gradle wrapper
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.