Gradle Multi Module Project 구성하기

Gradle Multi Module Project 구성 방법을 알아본다.


환경

spring boot 버전별로 설정 시 약간의 차이가 있으므로 주의.

  • spring boot 2.1.3 (2019.04.03 기준 최신 버전)
  • gradle 4.10.3
  • jdk 1.8
  • intellij

1. Create Root Project

  • (1) New Project > Gradle > Additional Libraries and Frameworks > java 선택 > Next
  • (2) GroupId, ArtifactId 입력 > Next
  • (3) Use auto-import 체크 해제되어있는지 확인 > Next > Finish

2. Create Sub Project

필요한 서브 프로젝트 개수만큼 생성

  • (1) File > New > Module
  • (2) Gradle > Additional Libraries and Frameworks > java 선택 > Next
  • (3) Group, Version Inherit 체크 되어있는지 확인
  • (4) ArtifactId 입력 > Next
  • (5) Sub Project는 Root Project 바로 아래에 모듈이 생성되어야 함. Content root 경로 잘 확인하기 > Finish

3. Project 기본 골격

  • 프로젝트 루트 밑에 src 폴더가 생성되었다면 Delete
  • 빌드는 항상 root 프로젝트를 기준으로 할 것이기 때문에 sub project의 gradle 폴더, gradlew, gradlew.bat, settings.gradle 등의 파일은 필요 없다. src 폴더와 build.gradle만 존재하도록 한다.
    • 서브 프로젝트를 Gradle project로 생성하였다면 build.gradle만 존재하지만 spring Initializr로 생성하면 gradle 폴더, gradlew 등이 존재.
  • Project 기본 골격은 아래 그림과 같다. (admin, api, common 서브 프로젝트 생성)

gradle-multi-module-scaffolding

4. Root Project와 Sub Project 관계 설정

  • (자동으로 등록되어 있지 않다면) Root Project의 settings.gradle에 아래와 같은 형식으로 sub project name을 include.
  • sample-multi-module 프로젝트가 하위 프로젝트들을 관리하겠다는 의미.
rootProject.name = 'sample-multi-module'
include 'sample-api'
include 'sample-admin'
include 'sample-common'

5. Root build.gradle 수정

buildscript {
    ext {
        springBootVersion = '2.1.3.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath "io.spring.gradle:dependency-management-plugin:1.0.6.RELEASE"
    }
}

allprojects {
    group 'com.sungjun'
    version '1.0-SNAPSHOT'
}

subprojects {
    apply plugin: 'java'
    apply plugin: 'org.springframework.boot'
    apply plugin: 'io.spring.dependency-management'

    sourceCompatibility = 1.8

    repositories {
        mavenCentral()
    }

    dependencies {
        testCompile group: 'junit', name: 'junit', version: '4.12'
    }
}

project(':sample-api') {
    dependencies {
        compile project(':sample-common')
    }
}

project(':sample-admin') {
    dependencies {
        compile project(':sample-common')
    }
}

6. 각 Sub 프로젝트의 build.gradle 수정

dependencies {
    compile('org.springframework.boot:spring-boot-starter-web')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

7. common 프로젝트 build.gradle 설정

  • 예제 project » 깃헙 확인
  • 위의 예제 project의 Common 프로젝트처럼 main 메소드가 없는 경우
    • 아래와 같이 bootJar, jar enabled 설정을 해야한다.
bootJar {
    enabled = false
}
jar {
    enabled = true
}
dependencies {
    compile('org.springframework.boot:spring-boot-starter-data-jpa')
    runtime('com.h2database:h2')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

8. 다른 Project에서 common project를 사용 할 경우

다른 project에서 common project의 Entity 클래스와 Repsoitory를 사용하기 위해서는 @EntityScan("com.sungjun.*"), @EnableJpaRepositories("com.sungjun.*") 2개의 어노테이션을 설정해 줘야 한다. (Common Project에 Entity 클래스와 Repository만 있는 경우에 한하여)

마무리

  • 위와 같이 그래들 멀티 모듈 기본 설정이 완료되면 실제 개발을 하는 데 큰 문제가 없을 것이다.
  • 방법만 제시하고 각각의 상세한 설명은 생략하였는데 Gradle 멀티 프로젝트(모듈) 관리 글과 같이 보면 이해가 조금 쉬울 것이다.(예제 프로젝트도 해당 블로그를 참고해서 작성하였다.)
facebook share twitter share
0%