Gradle 설정

마자나다·2023년 12월 29일

Spring

목록 보기
6/9

Gradle이란

  • Gradle은 자바 플랫폼 및 다양한 언어로 작성된 프로젝트의 빌드 자동화 도구이다. Groovy라는 언어로 작성된 DSL을 사용하여 프로젝트를 구성하고 빌드 할 수 있다.
  • 간단하게 나의 어플리케이션에서 사용되는 외부의 프로젝트를 간편하고 손쉽게 주입시켜준다.

멀티프로젝트 구성

  • 굳이 이 글을 쓰는이유는 이상하게 gradle의 멀티프로젝트를 구성하게 되면 알수없는 오류가 많이 생겨서 한참 고생한 기억이 많다....
    그래서 간단하게 배달 API에서 간단하게 어떻게 멀티프로젝트를 구성했는지 알아보자

BaedalMinjokDB

├── Core
│   ├── build.gradle
│   ├── gradle
│   ├── gradlew
│   ├── gradlew.bat
│   └── src
├── DeliveryAPI
│   ├── build.gradle
│   ├── gradle
│   ├── gradlew
│   ├── gradlew.bat
│   └── src
├── DeliveryUI
│   ├── HELP.md
│   ├── build
│   ├── build.gradle
│   ├── gradle
│   ├── gradlew
│   ├── gradlew.bat
│   └── src
├── build.gradle
├── settings.gradle

  • BaedalMinjokDB 프로젝트 내부에 멀티 모듈로 프로젝트를 생성해서 Core, DeliveryAPI, DeliveryUI 이렇게 3가지의 모듈을 추가하였다
  • API와 UI는 각자 프론트 부분과 서버의 부분을 맡고있다. 그리고 공통적으로 둘다 사용되어야하는 코드는 Core 모듈에 정리해놓았다.

build.gradle 설정

  • 각각의 멀티모듈에 build.gradle 파일에서 필요한 프로젝트를 의존성주입을 진행하였다.
  • 그리고 메인 BaedalMinjokDB의 build.gradle파일에는 subprojects를 따로 만들어서 공통된 의존성 주입을 관리해 주었다.
subprojects {

    apply plugin: 'java'
    apply plugin: 'org.springframework.boot'
    apply plugin: 'io.spring.dependency-management'
    apply plugin: 'com.github.johnrengelman.shadow'

    group = 'org.example'
    version = rootProject.version
    apply plugin: 'java'

    configurations {
        compileOnly {
            extendsFrom annotationProcessor
        }
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        compileOnly 'org.projectlombok:lombok'
        annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
        annotationProcessor 'org.projectlombok:lombok'
        implementation 'org.springframework.boot:spring-boot-starter-web'
    }

    test {
        useJUnitPlatform()
    }
}

settigs.gradle 설정

  • 메인 BaedalMinjokDB의 settigs.gradle 파일에서 루트프로젝트와 포함하고있는 각 모듈에 대한 구성을 설정한다. 인텔리제이에서 멀티모듈로 파일을 만들게 되면 자동으로 생성되긴한다!

settigs.gradle(BaedalMinjokDB)파일

rootProject.name = 'BaedalMinjokDB'
include 'DeliveryUI'
include 'Core'
include 'DeliveryAPI'
  • 그리고 API와 UI는 Core를 참조하여야하기 떄문에 build.gradle 내부에 implementation project(':Core')를 추가하여 Core를 사용할 수 있도록 추가한다.

그러면 문제없이 각각의 멀티모듈에서 Core의 공통된 코드를 확인할 수 있다.

내가겪은 문제점..

  • 나는 처음 멀티모듈을 생성할때 당연히 스프링에 관련된 코드이다 보니 new project에서 new module이 아닌 spring initialize로 만들어 버렸다.. -> 계속해서 API, UI 멀티모듈에서 Core를 못찾는 상황이 발생하고 한참을 멍청하게 해맸다.. ㅠㅠ

꼭 스프링 프로젝트가 아닌 모듈로 생성해서 나처럼 바보같은 실수는 안하길 바란다..

profile
우왕좌왕 개발

0개의 댓글