Gradle의 빌드 스크립트 블록의 목적


235

나는 Gradle을 처음 사용하고 문서를 읽고 있지만 그 일부를 이해하지 못합니다. 이 부품 중 하나가 buildscript블록 과 연결되어 있습니다. 그 목적은 무엇입니까?

빌드 스크립트가 외부 라이브러리를 사용해야하는 경우 빌드 스크립트 자체의 스크립트 클래스 경로에 추가 할 수 있습니다. 빌드 스크립트 클래스 경로를 선언하는 클로저를 전달하여 buildscript () 메서드를 사용하여이 작업을 수행합니다.

buildscript {
  repositories {
    mavenCentral()
  }
  dependencies {
    classpath group: 'commons-codec', name: 'commons-codec', version: '1.2'
  }
}

좋아, 그러나 차이점은 무엇입니까?

repositories {
  mavenCentral()
}
dependencies {
  compile group: 'commons-codec', name: 'commons-codec', version: '1.2'
}

예를 들어 왜 buildscript? 를 사용해야 합니까?


답변:


178

buildScript플러그인 블록 결정 작업 클래스 및 기타 클래스는에서 사용할 수있는 빌드 스크립트의 나머지 . buildScript블록이 없으면 Gradle과 함께 제공되는 모든 것을 즉시 사용할 수 있습니다. 타사 플러그인, 작업 클래스 또는 기타 클래스 (빌드 스크립트에서)를 추가로 사용하려면 buildScript블록에 해당 종속성을 지정해야합니다 .


2
나는 이해할 수 없다. 그룹sample.infotask', name: 'infotask', version: '1.0' 으로 태스크 클래스를 작성했습니다 . _uploadArchives 태스크를 사용 하여 로컬 저장소에 업로드하십시오. ../lib ' 다른 프로젝트에서 내 태스크를 사용하는 경우 다음을 작성해야합니다. lib '}} 종속성 {클래스 경로 그룹 :'sample.infotask ', 이름 :'infotask ', 버전 :'1.0 '}} 맞습니까? 왜 buildScript 블록을 사용해야 합니까? 아티팩트 로컬을 업로드하면 컴퓨터에 항아리가 있습니다. 그리고 Gradle에게 클래스 패스에서 어디에 그리고 무엇을 넣어야하는지 여기에서 특별한 점은 무엇입니까?
Xelian

40
buildScriptGradle 은 나머지 빌드 스크립트이해하려면 이 정보가 필요하므로 블록을 사용해야합니다 . 따라서이 정보를 별도의 채널 ( buildScript블록)에 제공해야합니다. 기술적으로 Gradle 은 나머지 빌드 스크립트 를 컴파일하고 평가 하기 위해이 정보가 필요합니다 . 기본적으로 Gradle은 빌드 스크립트를 두 개의 스크립트 ( buildScript블록 및 기타 모든 스크립트 )로 분리하여 개별적으로 처리 할 수 ​​있습니다.
Peter Niederwieser

1
다른 답변을 읽은 후이 답변을 읽으면 Peter가 말하고 싶은 말을 이해할 수 있습니다 (정확합니다). 그러나 두 번째 줄은 "buildScript 블록이 없으면 Gradle과 함께 제공되는 모든 것을 사용할 수 있습니다"라는 것이 ans를 모호하게 만드는 것입니다.
Dexter

전체 내용을 이해하게 해주는 간단한 메모입니다. "buildscript"를 사용할 때, buildscript {...} 내의 모든 종속성은 Java / Kotlin 코드 / 프로그램 (또는 사용중인 모든)에서 사용되지 않습니다. 그러나 대신 gradle 스크립트에서만 사용됩니다. 예를 들어 기본적으로 제공되지 않는 일부 플러그인을 사용해야하고 빌드 스크립트 {...}에 추가하면 gradle 스크립트에서만 사용할 수 있습니다. 그것이 도움이되기를 바랍니다
cesarmax

153
  • 글로벌 레벨 dependenciesrepositories섹션에는 소스를 빌드하고 소스를 실행하는 데 필요한 종속성이 나열됩니다.
  • buildscript위한 build.gradle파일 자체. 따라서 여기에는 RPM 생성에 대한 종속성 Dockerfile과 모든 종속 항목에서 작업을 실행하기위한 기타 종속성이 포함됩니다.build.gradle

4
gradle 자체에 대한 모든 확장은 buildscript-> dependencies를 통해 발견되며, buildscript-> repositories 섹션에서 다운로드됩니다. 빌드 스크립트 블록은 소스 컴파일 등과 같은 빌드 작업의 실행을 시작하기 전에 먼저 실행됩니다 (빌드 시스템 준비 단계)
Raja Nagendra Kumar

4
buildscript는 단순히 빌드 스크립트에 대한 의존성입니다
Slier

3
buildscript는 node.js의 devDependencies, 최상위 = 종속성입니다.
Jacob

67

Peter의 답변에 감사드립니다 ...하지만 나머지 빌드 스크립트 가 대답과 문서에서 강조한 의미가 무엇인지 즉시 나에게 분명하지 않았습니다 .

일반적으로 종속 기능을 가져 오는 것은 Java 프로그램 또는 작성중인 다른 프로그램에서 사용하기위한 것입니다. Spring에서 가져 오는 것은 빌드 스크립트가 아니라 Java 프로그램에서 사용된다고 말합니다. 에 넣어 buildscript의존성이 Gradle을 빌드 자체 내에서 사용할 수있는 폐쇄 보장합니다. 출력 프로그램이 아닙니다.


8

"buildscript"구성 섹션은 gradle 자체를위한 것입니다 (즉, gradle이 빌드를 수행하는 방법에 대한 변경). 따라서이 섹션에는 일반적으로 Android Gradle 플러그인이 포함됩니다.


2

조금 높은 수준이지만 희망이 도움이됩니다.

나를 위해, 빌딩 블록 , 방법 및 작업 이 무엇인지 이해하기 시작하면 명확한 구별이 형성되기 시작했습니다 . 구문이 어떻게 생겼는지, 어떻게 구성 할 수 있는지 등. 그래서이 모든 과정을 거치는 것이 좋습니다. 그 후에는이 구문을 이해하기 시작할 수 있습니다.

그런 다음 build.gradle 객체 (Project 클래스의 인스턴스)의 유형이 무엇인지 알아야 build.gradle 파일에 무엇이 있는지 알 수 있습니다. 그것은 'buildScript'와 다른 사람들이 어디에서 왔는지 대답 할 것입니다. 또한 기능 / 기능을 확장하려면 (Android라고 말하면) 플러그인 이 어떻게 도움이 되는지 확인하십시오 .

마지막으로 클로저, 스크립트를 이해하는 데 필수적인 개념 인 델리게이트에 대해 설명 하는 매우 유용한 자습서가 있습니다.


1

Android 최상위 gradle 파일을 시연하여 조금 더 설명합니다.

buildscript {
    // this is where we are going to find the libraries defined in "dependencies block" at below
    repositories {
        google()
        jcenter()
        maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }
    }

    // everything listed in the dependencies is actually a plugin, which we'll do "apply plugin" in our module level gradle file.
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.2' // this is android gradle plugin
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // kotlin gradle plugin
    }
}

모듈 레벨 gradle 파일

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

"플러그인"이란 무엇입니까? 그것들은 플러그인 인터페이스를 구현하는 Java 클래스 일뿐입니다. 인터페이스 아래에는 이름이 다른 여러 작업 개체를 추가하는 "적용"방법이 있습니다. 작업은 워크 플로를 구현할 수있는 클래스입니다. 예를 들어 빌드 작업은 앱 빌드 흐름으로 구성됩니다.

그렇다면 빌드 스크립트는 무엇을합니까? 플러그인을 찾을 위치를 정의합니다. 플러그인은 무엇을합니까? 여러 작업을 포함합니다. 작업은 무엇을합니까? 빌드, 설치, 보푸라기 등을 제공합니다.

내 이해가 잘못되었을 수 있습니다. 오해의 소지가있는 것을 발견하면 언제든지 주저하지 마십시오.

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