본문 바로가기
Gradle

[Gradle] 설정 파일 구조 완전 정복!

by 개발자의 2025. 7. 15.

진짜 핵심적인 파일들의 구조를 한번 파헤쳐 보자.

 

내가 생각할때 핵심 설정 파일들은 아래 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. 1 Line : JDK 버전
  2. 2 Line : Jackson 라이브러리 버전
  3. 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"
  1. Line 1 ~ Line 17 : pluginManagement 블록
    1. pluginManagement은 꼭! settings.gradle.kts에 위치해야한다.
      1. build.grale.kts에서는 pluginManagement 블록 자체가 인식되지 않음.
      2. Gradle 플러그인 자체를 어디에서 다운로드 할지 정의하는 설정.
      3. build.gradle.kts 파일이 실행되기 전에 필요함.
    2. Line 3 ~ Line 5 : gradle.properties파일에 작성한 변수를 settings 변수에서 받아온다.
    3. Line 7 ~ Line 10 : build.gradle.kts 파일에서 plugins 블록에서 사용하려는 플러그인을 찾아올 저장소를 지정하는 것.
      1. 기본값은 gradlePluginPortal()이며, id("java")를 비롯한 많은 플러그인이 여기 있음.
      2. mavenCentral()에만 존재하는 특정 플러그인을 사용하려면 필수적으로 작성해야함.
    4. Line 12 ~ Line 16 : 사용할 플러그인의 버전을 설정한다.
      1. 여기서 지정한다고 플러그인을 사용하는 것은 아님.
        build.gradle.kts에서 사용할 플러그인을 지정하면 사용함. 단지 버전을 고정하는 것.
  2. Line 19 : 이름 설정
    1. rootProject.name에 설정된 이름은 별도의 설정이 없다면 jar 파일의 이름 앞부분이 된다. (learn-gradle)

jar file 이름으로 적용

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 이름에 [버전]으로 들어감.
  • 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
    • 리소스 추가 맵핑
      • from("extra-resources/") : extra-resources하위의 정적 파일들도 jar로 만들때 resources로 통합된다.
  • 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 버전이 바뀐다.