일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 웹 크롤링
- 고전역학
- NIO
- 코틀린
- write by GPT-4
- JVM
- Spring boot
- 자바암호
- 소프트웨어공학
- GPT-4's answer
- kotlin
- oracle
- 자바네트워크
- python
- 뉴턴역학
- write by chatGPT
- lombok
- 인프라
- GIT
- chatGPT's answer
- 역학
- flet
- 시스템
- Database
- 리눅스
- 유닉스
- 파이썬
- Java
- android
- 자바
- Today
- Total
Akashic Records
Gradle 구조와 사용법 본문
Gradle에는 다양한 기본적인 태스크와 라이프 사이클이 있습니다. 각 태스크는 특정 작업을 수행하며, 라이프 사이클은 프로젝트 빌드의 단계를 설명합니다.
기본 태스크
clean
: 이 태스크는 빌드 디렉토리를 삭제하여 이전 빌드 출력을 제거합니다.assemble
: 이 태스크는 모든 아티팩트를 만듭니다 (예: JAR 파일).check
: 이 태스크는 모든 테스트를 실행하고 다른 검사를 수행합니다.build
:assemble
과check
를 모두 실행합니다. 즉, 아티팩트를 만들고 테스트를 실행합니다.test
: 이 태스크는 단위 테스트를 실행합니다.jar
: 이 태스크는 JAR 파일을 만듭니다.
플러그인에 따라 추가적인 태스크가 있을 수 있습니다. 예를 들어, war
플러그인은 WAR 파일을 만드는 war
태스크를 추가합니다.
라이프 사이클
Gradle 빌드 프로세스의 라이프 사이클은 다음과 같습니다:
- 초기화 단계: 이 단계에서는 빌드가 어떤 프로젝트로 구성되어 있는지를 결정합니다. 단일 프로젝트인 경우에는 많은 것이 결정되지 않지만, 다중 프로젝트인 경우에는 어떤 프로젝트가 있는지 그리고 그들 사이의 관계는 어떤지를 결정합니다.
- 구성 단계: 이 단계에서는 빌드 스크립트를 실행합니다. 이 단계의 결과로 각 프로젝트의 태스크 그래프가 생성됩니다. 태스크 그래프는 실행해야 하는 태스크와 그 순서를 결정합니다.
- 실행 단계: 이 단계에서는 구성 단계에서 생성된 태스크 그래프에 따라 태스크가 실행됩니다. 각 태스크는 완전히 독립적으로 실행될 수 있고, Gradle는 태스크 간의 종속성을 고려하여 가능한 한 효율적으로 태스크를 실행합니다.
빌드 라이프 사이클 이해는 Gradle을 사용하여 복잡한 빌드를 구성하고 최적화하는 데 중요합니다.
build.gradle 파일의 구조
build.gradle
파일은 Gradle이 빌드를 수행하는 방법을 정의하는 곳입니다. build.gradle
파일의 기본 구조는 대략 다음과 같습니다:
- 플러그인 선언
- 리포지토리 정의
- 의존성 선언
- 태스크 정의
다음은 각 섹션에 대한 좀 더 자세한 설명입니다:
플러그인 선언
플러그인은 빌드 및 배포 프로세스를 확장하거나 변경하는데 사용됩니다. 예를 들어, 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
외에도 몇 가지가 있습니다:
- doFirst: 이 메서드는
doLast
와 비슷하나, 특정 태스크가 시작될 때 처음에 실행될 작업을 정의합니다.
task myTask {
doFirst {
println 'This task is starting.'
}
doLast {
println 'This task is finishing.'
}
}
- dependsOn: 이 메서드는 한 태스크가 다른 태스크에 종속될 때 사용합니다.
dependsOn
메서드를 사용하면 특정 태스크가 실행되기 전에 다른 태스크가 먼저 실행되도록 할 수 있습니다.
task task1 {
doLast {
println 'Task 1 is running.'
}
}
task task2 {
dependsOn task1
doLast {
println 'Task 2 is running.'
}
}
위의 예제에서 task2
는 task1
에 의존하므로, gradle task2
를 실행하면 task1
이 먼저 실행되고 그 다음에 task2
가 실행됩니다.
- finalizedBy: 한 태스크의 실행이 완료된 후에 항상 실행되어야 하는 다른 태스크를 지정할 때 사용합니다.
task task1 {
doLast {
println 'Task 1 is running.'
}
}
task task2 {
doLast {
println 'Task 2 is running.'
}
}
task1.finalizedBy task2
위의 예제에서 task1
이 완료되면 task2
가 항상 실행됩니다.
이러한 메서드들은 태스크의 실행 순서를 정의하고, 태스크 간의 종속성을 관리하는 데 도움이 됩니다.
'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 |