본문 바로가기
프로그래밍/기타

[gradle] buildSrc를 이용한 gradle 의존성 관리

by 사바라다 2021. 11. 22.

안녕하세요. 오늘은 gradle의 의존성 관리를 좀 더 명확하고 유지관리하게 쉽게 할 수 있는 gradle의 buildSrc에 대해서 알아보는 시간을 가져보도록 하겠습니다.

빌드 도구의 상수와 함수

코딩을 하면 기본적으로 자주 사용하는 함수 또는 상수에 대해서 별도의 파일로 선언하여 여러 곳에서 참조할 수 있게합니다. 이렇게 함으로써 중복 코드를 줄이고 코드의 가독성도 높일 수 있습니다. 이건 이 글을 읽고 있는 개발자이신 여러분들에게는 기본적인 것이겠지요. gradle 에서도 buildSrc를 이용하면 이러한 방법으로 script를 작성할 수 있다는 사실을 알고 있으셨나요 ?


buildSrc를 이용하면 build script를 더 쉽게 유지보수하고 가독성을 향상시킬 수 있습니다.

buildSrc와 included build

gradle에서는 root 디렉토리 아래에 buildSrc 라는 디렉토리가 있으면 해당 디렉토리는 included build로 다루어 진다고 합니다. included build로 다루어지면 gradle에서는 자동적으로 해당 디렉토리의 내용을 컴파일 및 테스트하고 build script에서 참조할 수 있도록 classpath에 넣어두게 됩니다. 따라서 사용하는 사람은 이를 직접 호출해서 가져와 사용할 수 있다는 의미입니다.

buildSrc 구성 방법 ( directory 구조 등 )

이제 실제로 buildSrc를 구성하고 사용하는 방법에 대해서 알아보도록 하겠습니다. 먼저 buildSrc 디렉토리를 프로젝트의 root 디렉토리에 추가하도록 하겠습니다. 아래와 같이 프로젝트 구성이 이루어지면 됩니다. api는 멀티모듈 중 하나이므로 무시하셔도 좋습니다.

kotlin 파일 내부 구성

buildSrc 디렉토리의 내부 파일을 한번 구성해 보도록 하겠습니다. 처음에는 빈 디렉토리 일 것입니다. 여기에 우리가 included build로 처리하기 위해서 기본적으로 몇가지 추가해야합니다. 추가해주어야하는 리스트는 아래와 같습니다.

  • build.gradle.kts
  • src 디렉토리
    • 내부에 java 또는 groovy, 또는 kotlin 파일을 두고 사용할 수 있습니다.

이러한 코드가 있고 gralde을 import 하게 되면 intellij 기준으로 자동으로 .gradle과 .idea, 그리고 build가 생성됩니다. 이렇게 자동 생성된 파일들은 gralde의 clean 명령어를 통해서 지워지지 않습니다. 왜냐하면 included build이기 때문입니다.

아래는 build.gradle.kts 파일의 코드입니다. kotlin-dsl을 사용하기 위해서 plugin을 하나 import 했습니다. java를 사용하신다면 별도로 import 하실 필요는 없어보입니다.

repositories {
    jcenter()
}

plugins {
    `kotlin-dsl`
}

그리고 아래는 코틀린으로 만든 Plugin과 version을 변수로 만들어 둔 것입니다. 이렇게 만들어 둔 변수들을 사용하고자 하는 build.gradle.kts 파일에서 사용하시면 됩니다.

object Plugins {

    const val jpa = "plugin.jpa"
    const val spring = "plugin.spring"
    const val kapt = "kapt"

    object Version {
        const val kotlin = "1.5.31"
    }
}

kotlin이 어색하시다면 아래처럼 Java 파일로도 사용하실 수 있으니 추가적으로 알아두시면 됩니다.

public class JavaLibs {
    public static String kotlin_version = "1.5.31";
}

실제 사용 (build.gradle.kts)

실제 사용은 아래 코드처럼 사용할 수 있습니다. 아래 빌드 도구의 script를 보시겠습니다. 원래 "jvm"과 같이 리터럴 문자열이 들어갈 자리에 buildSrc에서 선언한 변수가 들어가 있는 것을 알 수 있습니다. 이런식으로 사용함으로써 좀 더 유지보수 가능한 빌드도구 script가 만들어진 것을 확인할 수 있습니다.

plugins {
    base
    java
    kotlin("jvm") version JavaLibs.kotlin_version
    kotlin(Plugins.jpa) version Plugins.Version.kotlin apply false
    kotlin(Plugins.spring) version Plugins.Version.kotlin apply false
    kotlin(Plugins.kapt) version Plugins.Version.kotlin apply false
}

마무리

오늘은 이렇게 buildSrc를 이용하여 gradle 빌드 도구의 유지보수와 가독성을 향상시킨것을 확인해보았습니다.

감사합니다.

참조

gradle_docs_organizing_gradle_projects

gradle_docs_composite_build_intro

댓글