Akashic Records

Gradle 구조와 사용법 본문

Library

Gradle 구조와 사용법

Andrew's Akashic Records 2023. 5. 19. 15:42
728x90

Gradle에는 다양한 기본적인 태스크와 라이프 사이클이 있습니다. 각 태스크는 특정 작업을 수행하며, 라이프 사이클은 프로젝트 빌드의 단계를 설명합니다.

 

기본 태스크

  1. clean: 이 태스크는 빌드 디렉토리를 삭제하여 이전 빌드 출력을 제거합니다.
  2. assemble: 이 태스크는 모든 아티팩트를 만듭니다 (예: JAR 파일).
  3. check: 이 태스크는 모든 테스트를 실행하고 다른 검사를 수행합니다.
  4. build: assemblecheck를 모두 실행합니다. 즉, 아티팩트를 만들고 테스트를 실행합니다.
  5. test: 이 태스크는 단위 테스트를 실행합니다.
  6. jar: 이 태스크는 JAR 파일을 만듭니다.

플러그인에 따라 추가적인 태스크가 있을 수 있습니다. 예를 들어, war 플러그인은 WAR 파일을 만드는 war 태스크를 추가합니다.

 

라이프 사이클

Gradle 빌드 프로세스의 라이프 사이클은 다음과 같습니다:

 

  1. 초기화 단계: 이 단계에서는 빌드가 어떤 프로젝트로 구성되어 있는지를 결정합니다. 단일 프로젝트인 경우에는 많은 것이 결정되지 않지만, 다중 프로젝트인 경우에는 어떤 프로젝트가 있는지 그리고 그들 사이의 관계는 어떤지를 결정합니다.
  2. 구성 단계: 이 단계에서는 빌드 스크립트를 실행합니다. 이 단계의 결과로 각 프로젝트의 태스크 그래프가 생성됩니다. 태스크 그래프는 실행해야 하는 태스크와 그 순서를 결정합니다.
  3. 실행 단계: 이 단계에서는 구성 단계에서 생성된 태스크 그래프에 따라 태스크가 실행됩니다. 각 태스크는 완전히 독립적으로 실행될 수 있고, Gradle는 태스크 간의 종속성을 고려하여 가능한 한 효율적으로 태스크를 실행합니다.

빌드 라이프 사이클 이해는 Gradle을 사용하여 복잡한 빌드를 구성하고 최적화하는 데 중요합니다.

build.gradle 파일의 구조

build.gradle 파일은 Gradle이 빌드를 수행하는 방법을 정의하는 곳입니다. build.gradle 파일의 기본 구조는 대략 다음과 같습니다:

  1. 플러그인 선언
  2. 리포지토리 정의
  3. 의존성 선언
  4. 태스크 정의

다음은 각 섹션에 대한 좀 더 자세한 설명입니다:

 

플러그인 선언

플러그인은 빌드 및 배포 프로세스를 확장하거나 변경하는데 사용됩니다. 예를 들어, Java 프로젝트를 빌드하려면 'java' 플러그인을 사용하면 됩니다.

plugins {
    id 'java'
}

 

리포지토리 정의

라이브러리와 기타 프로젝트 의존성이 다운로드될 저장소를 정의합니다. 가장 일반적인 저장소는 Maven Central과 JCenter입니다.

repositories {
    mavenCentral()
}

 

의존성 선언

프로젝트가 필요로 하는 모든 라이브러리를 선언합니다. 이는 dependencies 블록 내에서 수행됩니다.

dependencies {
    implementation 'com.google.code.gson:gson:2.8.7'
}

 

태스크 정의

사용자 정의 태스크를 정의하여 빌드 프로세스를 사용자화할 수 있습니다.

task myTask {
    doLast {
        println 'This is a custom task.'
    }
}

그러면 gradle myTask를 실행하여 이 태스크를 호출할 수 있습니다.

 

위의 예제는 매우 기본적인 build.gradle 파일의 형태를 보여줍니다. 실제 프로젝트에서는 이보다 훨씬 복잡한 구조와 로직을 볼 수 있습니다. build.gradle 파일은 Groovy 또는 Kotlin DSL로 작성되므로, 해당 언어에 대한 이해도 Gradle 파일 작성 능력을 향상시킵니다.

주요 메서드

Gradle의 doLast 메서드는 특정 태스크가 실행될 때 마지막에 실행할 작업을 정의합니다. doLast 블록에 포함된 코드는 태스크가 실행될 때까지 지연되며, 해당 태스크의 모든 액션이 완료된 후에 실행됩니다.

즉, doLast는 해당 태스크의 "액션"을 추가하는 방법입니다. 이는 보통 태스크의 주요 작업을 수행하는 곳이며, 예를 들어 파일을 복사하거나, 메시지를 출력하거나, 다른 태스크를 호출하는 등의 작업을 수행합니다.

 

다음은 doLast를 사용한 예제입니다:

task hello {
    doLast {
        println 'Hello, World!'
    }
}

이 태스크를 실행하면, Gradle은 Hello, World!라는 메시지를 출력합니다. 이 메시지는 hello 태스크가 실행될 때만 출력되며, 그렇지 않으면 출력되지 않습니다.

 

태스크에는 여러 개의 doLast 블록을 추가할 수 있으며, 이들은 태스크가 실행될 때 정의된 순서대로 실행됩니다.

Gradle에서 사용할 수 있는 주요 메서드 중 doLast 외에도 몇 가지가 있습니다:

 

  1. doFirst: 이 메서드는 doLast와 비슷하나, 특정 태스크가 시작될 때 처음에 실행될 작업을 정의합니다.
task myTask {
    doFirst {
        println 'This task is starting.'
    }
    doLast {
        println 'This task is finishing.'
    }
}
  1. dependsOn: 이 메서드는 한 태스크가 다른 태스크에 종속될 때 사용합니다. dependsOn 메서드를 사용하면 특정 태스크가 실행되기 전에 다른 태스크가 먼저 실행되도록 할 수 있습니다.
task task1 {
    doLast {
        println 'Task 1 is running.'
    }
}

task task2 {
    dependsOn task1
    doLast {
        println 'Task 2 is running.'
    }
}

위의 예제에서 task2task1에 의존하므로, gradle task2를 실행하면 task1이 먼저 실행되고 그 다음에 task2가 실행됩니다.

  1. finalizedBy: 한 태스크의 실행이 완료된 후에 항상 실행되어야 하는 다른 태스크를 지정할 때 사용합니다.
task task1 {
    doLast {
        println 'Task 1 is running.'
    }
}

task task2 {
    doLast {
        println 'Task 2 is running.'
    }
}

task1.finalizedBy task2

위의 예제에서 task1이 완료되면 task2가 항상 실행됩니다.

이러한 메서드들은 태스크의 실행 순서를 정의하고, 태스크 간의 종속성을 관리하는 데 도움이 됩니다.

728x90

'Library' 카테고리의 다른 글

SDKMAN 가이드  (0) 2023.06.15
Intelij 단축키  (0) 2023.06.09
Web 더블클릭 방지하는 방법  (0) 2023.05.09
JavaScript vs. TypeScript: What's the difference?  (0) 2023.05.09
ECMAScript 5와 ECMAScript 2015 비교  (0) 2023.05.09
Comments