진짜 핵심적인 파일들의 구조를 한번 파헤쳐 보자.
내가 생각할때 핵심 설정 파일들은 아래 3가지다.
- gradle.properties
- settings.gradle.kts
- build.gradle.kts
실행 순서에 따라서 먼저 gradle.properties 부터 살펴보자!
gradle.properties
javaVersion=21
jacksonVersion=2.19.0
junitVersion=5.13.3
gradle.properties 파일은 전역으로 환경설정할 때 사용한다.
여기서는 전역으로 사용할 버전의 정보들을 관리하고 있다.
이렇게 해두면, 버전은 이곳에서 한 번에 관리할 수 있다.
- 1 Line : JDK 버전
- 2 Line : Jackson 라이브러리 버전
- 3 Line : Junit버전
이 파일에 버전들을 위와 같이 써 넣는다고 그렇게 적용이 되는것은 아니다.
사용 방법은 아래에서 확인하자.
settings.gradle.kts
(주석 부분은 현재는 사용하지 않지만, 앞으로 사용할 내용들을 미리 적어둠..)
pluginManagement {
// val springBootVersion: String by settings
// val springBootDependencyManagementVersion: String by settings
// val dockerComposeVersion: String by settings
repositories {
gradlePluginPortal()
mavenCentral()
}
// plugins {
// id("org.springframework.boot") version springBootVersion
// id("io.spring.dependency-management") version springBootDependencyManagementVersion
// id("com.avast.gradle.docker-compose") version dockerComposeVersion
// }
}
rootProject.name = "learn-gradle"
- Line 1 ~ Line 17 : pluginManagement 블록
- pluginManagement은 꼭! settings.gradle.kts에 위치해야한다.
- build.grale.kts에서는 pluginManagement 블록 자체가 인식되지 않음.
- Gradle 플러그인 자체를 어디에서 다운로드 할지 정의하는 설정.
- build.gradle.kts 파일이 실행되기 전에 필요함.
- Line 3 ~ Line 5 : gradle.properties파일에 작성한 변수를 settings 변수에서 받아온다.
- Line 7 ~ Line 10 : build.gradle.kts 파일에서 plugins 블록에서 사용하려는 플러그인을 찾아올 저장소를 지정하는 것.
- 기본값은 gradlePluginPortal()이며, id("java")를 비롯한 많은 플러그인이 여기 있음.
- mavenCentral()에만 존재하는 특정 플러그인을 사용하려면 필수적으로 작성해야함.
- Line 12 ~ Line 16 : 사용할 플러그인의 버전을 설정한다.
- 여기서 지정한다고 플러그인을 사용하는 것은 아님.
build.gradle.kts에서 사용할 플러그인을 지정하면 사용함. 단지 버전을 고정하는 것.
- 여기서 지정한다고 플러그인을 사용하는 것은 아님.
- pluginManagement은 꼭! settings.gradle.kts에 위치해야한다.
- Line 19 : 이름 설정
- rootProject.name에 설정된 이름은 별도의 설정이 없다면 jar 파일의 이름 앞부분이 된다. (learn-gradle)

build.gradle.kts
val javaVersion: String by project
val jacksonVersion: String by project
val junitVersion: String by project
plugins {
java
}
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(javaVersion))
}
}
group = "org.example"
version = "1.0-SNAPSHOT"
repositories {
mavenCentral()
}
dependencies {
implementation("com.fasterxml.jackson.core:jackson-databind:$jacksonVersion")
testImplementation(platform("org.junit:junit-bom:$junitVersion"))
testImplementation("org.junit.jupiter:junit-jupiter")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
}
tasks.named<Jar>("jar") {
archiveBaseName.set("my-app")
from("extra-resources/")
}
tasks.named<Test>("test") {
useJUnitPlatform() // junit5, spock,
}
- Line 1 ~ Line 3 : 전역변수 설정
- gradle.properties 파일에서 선언한 변수들을 project 객체에서 가져온다.
- Line 5 ~ Line 7 : plugins 블록
- 사용할 플러그인을 지정한다.
- Line 9 ~ Line 13 : Java Toolchain 설정
- Gradle이 프로젝트를 빌드할 때 사용할 Java 버전을 명시
- javaVersion은 gradle.properties에 설정한 값이며, 1 Line에서 project 객체에서 가져온 값을 쓴다.
- 로컬에 해당 Java 버전이 없더라도 자동으로 설치하여 해당 버전으로 빌드한다. (Gradle 6.7 이상)
ex > javaVersion=21이면, Java 21로 컴파일.
- Line 15 ~ Line 16 : 프로젝트 정보 설정
- group : 프로젝트나 라이브러리를 구분하는 "고유한 이름 공간"
ex> com.tinyquest, org.springframework.boot
maven과 같은 저장소에 올릴때, 고유식별자로 사용
다른 프로젝트에서 group:name:version 형식으로 사용함.
ex> implementation("com.fasterxml.jackson.core:jackson-databind:$jacksonVersion") - version : jar 이름에 [버전]으로 들어감.
- group : 프로젝트나 라이브러리를 구분하는 "고유한 이름 공간"
- Line 18 ~ Line 20 : 저장소 설정
- 이 부분의 설정은 아래 의존성 설정에 영향을 미친다.
- 의존성을 가져올 저장소를 설정한다.
- Line 22 ~ Line 29 : 의존성 설정
- 어떤 라이브러리를 사용할지 작성한다.
- 이 부분에서 버전을 지정하는 곳에 $jacksonVersion, $junitVersion은 gradle.properties에 설정한 값이며,
Line 2와 Line 3에서 project 객체에서 가져온 값을 쓴다.
- Line 31 ~ Line 34 : Jar 태스크 커스터마이징
- jar 이름 변경 : [이름]-[버전].jar
- archiveBaseName.set("my-app") : jar 파일 이름 부분을 바꾼다
ex > learn-gradle-1.0-SNAPSHOT.jar -> my-app-1.0-SNAPSHOT.jar로 변경된다. - archiveVersion.set("1.3.2") : jar파일의 버전 부분을 바꾼다.
ex > my-app-1.3.2.jar
- archiveBaseName.set("my-app") : jar 파일 이름 부분을 바꾼다
- 리소스 추가 맵핑
- from("extra-resources/") : extra-resources하위의 정적 파일들도 jar로 만들때 resources로 통합된다.
- jar 이름 변경 : [이름]-[버전].jar
- Line 36 ~ Line 39 :Test 태스크 커스터마이징
- Gradle에게 JUnit 5(Jupiter) 기반 테스트 플랫폼을 사용하라고 지정하는 설정
- 만약 Junit5 기반이 아닌 다른 프레임워크 쓰고싶을때, 변경
ex > useTestNG() // TestNG 프레임워크, 그리고 이에 맞는 의존성도 같이 추가..
gradle/wrapper/gradle-wrapper.properties (보너스!)
이 파일은 수정할 일이 거의 없는데,
프로젝트 버전을 변경할때 Gradle의 버전도 바꿔야 한다면, 이부분을 모르면, 좀 당혹스럽다.
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
중요한 부분은 "distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip" 여기다.
여기서 gradle-8.13-bin.zip 이 부분을 변경해야 Gradle 버전이 바뀐다.
'Gradle' 카테고리의 다른 글
| [개발자의 Gradle] Configurations? 누구냐 너! -1 (1) | 2025.08.01 |
|---|---|
| [개발자의 Gradle] 변수를 사용하는 여러가지 방법 (4) | 2025.07.30 |
| [Gradle] Phase (1) | 2025.07.10 |
| [Gradle] Gradle Task, 왜 이렇게 많고 헷갈리는 거야? (1) | 2025.07.09 |
| [Gradle] groovy가 좋은거예요? kotlin이 좋은거예요? (0) | 2025.06.09 |