본문 바로가기

gradle

Gradle이란

Gradle이란

  • Gradle은 오픈 소스 빌드 자동화 도구입니다.
  • Gradle의 빌드 스크립트는 groovy 또는 Kotlin DSL(Domain Specific language, 도메인 특화 언어)을 사용하여 작성됩니다.

Gradle의 장점

  • 공식문서에서 정의되어있는 장점은 Highly customizable, Fast, Poweful 이 세 단어로 표현하고 있습니다.
  • 사용자 정의가 가능하며 확장 가능합니다.
  • 이전 실행의 출력을 재사용하고 변경된 입력만 처리하며, task를 병렬 처리하기 때문에 속도가 빠릅니다.
  • Android용 공식 빌드도구이며, 많은 언어와 기술들을 지원합니다.

Gradle Structure(Groovy)

  • 공식 문서에 Gradle 프로젝트 생성 참고
  • ├── gradle 
    │   └── wrapper
    │       ├── gradle-wrapper.jar
    │       └── gradle-wrapper.properties
    ├── gradlew 
    ├── gradlew.bat 
    ├── settings.gradle 
    └── app
      ├── build.gradle 
      └── src
          ├── main
          │   └── java 
          │       └── demo
          │           └── App.java
          └── test
              └── java 
                  └── demo
                      └── AppTest.java
  • gradle : gradle wrapper(선언된 버전의 gradle을 호출하여 필요한 경우 미리 다운로드) 관련 파일
  • gradlew, gradlew.bat : gradle wrapper 의 시작 스크립트
  • settings.gradle : 빌드 이름 및 하위 프로젝트를 정의
  • app : project
  • /app/build.gradle : app project의 빌드 스크립트

settings.gradle(groovy)

$ cat settings.gradle
rootProject.name = 'demo'
include('app')
  • rootProject.name : 빌드에 이름을 할당. 빌드가 있는 경로(gradle 프로젝트 경로)에 따라 빌드이름을 지정합니다.
  • include("app") : 빌드가 실제코드와 빌드 로직을 포함하는 app이라는 하위 프로젝트로 구성되었음을 정의합니다.

build.gradle(groovy)

$ cat app/build.gradle
plugins {
    id 'application' 
}

repositories {
    mavenCentral() 
}

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter:5.7.2' 

    implementation 'com.google.guava:guava:30.1.1-jre' 
}

application {
    mainClass = 'demo.App' 
}

tasks.named('test') {
    useJUnitPlatform() 
  • plugins : gradle에서 지원하는 플러그인 을 정의합니다. application 플러크인은 java에서 CLI 어플리케이션의 빌드를 지원합니다.
  • repositores : 종속성 해결 을 정의합니다. mavenCentral() 은 repositoryHandler에서 정의된 주소를 통해 종속성을 해결합니다.
  • dependencies : 의존성을 주입받습니다. 이 부분은 추가로 포스팅을 남길 예정입니다.
  • tasks : gradle 프로젝트의 작업 단위 입니다. 해당 task만 실행 할 수 있습니다.(gulpjs의 task()와 유사합니다). 예시에서는 test란 이름으로 해당 task를 실행할 수 있습니다.

Run the application

$ ./gradlew run
> Task :app:run
Hello world!

BUILD SUCCESSFUL
2 actionable tasks: 2 executed
  • application 플러그인은 명령줄에서 직접 어플리케이션을 실행할 수 있습니다.
  • mainClass 속성에 할당된 클래스의 기본 메서드를 실행합니다. (Hello World!란 출력은 main 메소드에 작성되어있습니다)

Bundle the application

$ ./gradlew build
BUILD SUCCESSFUL in 0s
7 actionable tasks: 7 executed
  • application 플러그인은 모든 종속성과 함께 응용프로그램을 번들로 제공합니다.
  • 번들 파일의 기본 경로는 어플리케이션 내 build/distributions/[어플리케이션명].tar, [어플리케이션명].zip 입니다.

Publish a Build Scan

$ ./gradlew build --scan
BUILD SUCCESSFUL in 0s
7 actionable tasks: 7 executed

Publishing a build scan to scans.gradle.com requires accepting the Gradle Terms of Service defined at https://gradle.com/terms-of-service.
Do you accept these terms? [yes, no] yes

Gradle Terms of Service accepted.

Publishing build scan...
https://gradle.com/s/5u4w3gxeurtd2
  • 위 링크를 통해 빌드 내용을 상세하게 조회할 수 있습니다. 프로젝트 빌드가 실패하였을 경우 참고할 수 있습니다.

출처 : https://gradle.org/

'gradle' 카테고리의 다른 글

[gradle] spring boot & react 프로젝트 빌드하기  (0) 2022.03.28