[Gradle] settings.gradle에 멀티 프로젝트 설정하기

2023. 6. 9. 15:43· 그 외 공부/기타
728x90

멀티모듈 프로젝트를 구성하기 위해 프로젝트 패키지 루트 경로의 settings.gradle 파일에 각 프로젝트 디렉토리를 설정해줘야했다.

 

내가 만든 구조는 아래와 같았다.

 

- boot

    - api-server

    - batch

    - kafka

- core

    - domain

    - persistence

 

루트 패키지를 기준으로 쭉쭉 모듈들이 존재하는게 아니라 성격이 비슷한 모듈들을 하나의 디렉토리 내에 모아놓은 형태였다.

 

루트 패키지 내에 바로 존재하는 모듈을 include해주기 위해선 include 'foo' 처럼 해주므로, 느낌상 특정 디렉토리 하위에 있는 프로젝트는 include 'foo:bar' 처럼 해주면 될 것 같았다.

 

그래서 아래와 같이 설정했다.

// settings.gradle
rootProject.name = 'multi-module'

include 'boot:api-server'
include 'boot:batch'
include 'boot:kafka'

include 'core:domain'
include 'core:persistence'

 

하지만 결과는.. 띠용이었다.

예상대로라면 실제 모듈인 api-server, batch, kafka, domain, persistence만 gradle에 잡혀야할 것 같은데, 단순 디렉토리일 뿐인 boot와 core 또한 gradle에 잡혔다.

 

 

뇌피셜은 그만두고 공식 문서에 적힌 예시를 보자 헤헤

// include two projects, 'foo' and 'foo:bar'
// directories are inferred by replacing ':' with '/'
include 'foo:bar'

내가 예상했던 include 'foo:bar'는 'foo' 안에 있는 'bar'를 설정하는게 아니라 'foo'와 'bar'를 모두 프로젝트로 등록하는 것이었다.

 

특정 디렉토리 내에 속한 프로젝트를 등록해주기 위해선, 아래와 같이 해당 프로젝트의 물리적인 위치를 직접 설정해줘야한다.

// include one project whose project dir does not match the logical project path
include 'baz'
project(':baz').projectDir = file('foo/baz')

 

즉, 기존 settings.gradle은 아래와 같이 수정되어야한다.

// settings.gradle
rootProject.name = 'multi-module'

include 'api-server'
project(':api-server').projectDir = file('boot/api-server')

include 'batch'
project(':batch').projectDir = file('boot/batch')

include 'kafka'
project(':kafka').projectDir = file('boot/kafka')

include 'domain'
project(':domain').projectDir = file('core/domain')

include 'persistence'
project(':persistence').projectDir = file('core/persistence')

내가 원한대로 단순 디렉토리인 boot와 core는 빠지고 실제 모듈만 프로젝트로 잘 등록된 것을 확인할 수 있었다.

 

물론, 각 프로젝트를 일일이 적어주는게 매우 불편해보인다.

 

이런 상황에서 적용할 수 있는 특정 디렉토리에 포함된 모든 프로젝트를 등록하는 예시도 있다.

// include many projects whose project dirs do not match the logical project paths
file('subprojects').eachDir { dir ->
  include dir.name
  project(":${dir.name}").projectDir = dir
}

 

위 예시를 적용해보면, 다음과 같이도 수정될 수 있다.

file('core').eachDir { dir ->
    include dir.name
    project(":${dir.name}").projectDir = dir
}

file('boot').eachDir { dir ->
    include dir.name
    project(":${dir.name}").projectDir = dir
}
저작자표시 (새창열림)

'그 외 공부 > 기타' 카테고리의 다른 글

ArchUnit으로 아키텍쳐 컨밴션 유지하기!  (0) 2025.05.20
Replication Lag 해결전략 정리하기!  (2) 2025.01.17
Static Method를 Mocking 하게 해줘야할까?  (0) 2024.10.24
메일 서버의 동작 구조와 프로토콜 (SMTP, POP3, IMAP)  (0) 2022.08.05
리눅스 크론탭(crontab) 사용법  (0) 2021.07.31
'그 외 공부/기타' 카테고리의 다른 글
  • Replication Lag 해결전략 정리하기!
  • Static Method를 Mocking 하게 해줘야할까?
  • 메일 서버의 동작 구조와 프로토콜 (SMTP, POP3, IMAP)
  • 리눅스 크론탭(crontab) 사용법
SeongOnion
SeongOnion
서버는 꺼지지 않아요
SeongOnion
조무래기 코딩
SeongOnion
전체
오늘
어제
  • 분류 전체보기 (167)
    • 알고리즘 (81)
      • 이론 (8)
      • 문제풀이 (73)
    • 언어 (15)
      • Python (9)
      • JavaScript (1)
      • JAVA (5)
    • 데이터베이스 (5)
    • 프레임워크 (15)
      • Django (7)
      • Spring (8)
    • 그 외 공부 (38)
      • 운영체제 (1)
      • 자료구조 (14)
      • 네트워크 (5)
      • CS (2)
      • 기타 (7)
      • 트러블 슈팅 (9)
    • 프로젝트 (0)
    • 개발자취 (8)
    • 회고 (3)
    • 주저리주저리 (1)
    • 기타 (비개발) (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 컨트리뷰트
  • 브루트포스
  • 트러블 슈팅
  • 백준
  • 코딩
  • 정렬 알고리즘
  • 투 포인터 알고리즘
  • 자바
  • DRF
  • 소수
  • spring
  • BFS/DFS
  • 알고리즘
  • 개발자
  • 프로그래머스
  • Django
  • DP
  • 데이터베이스
  • 그리디알고리즘
  • 에라토스테네스의 체
  • 코딩테스트
  • 큐
  • BFS
  • 스택
  • 오픈소스
  • 웹
  • 이진탐색
  • 회고
  • 파이썬
  • 장고

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
SeongOnion
[Gradle] settings.gradle에 멀티 프로젝트 설정하기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.