ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฐ˜์‘ํ˜•

Gradle Multi Module ํ”„๋กœ์ ํŠธ ์…‹ํŒ… ๋ฐ ๋นŒ๋“œ

๊ฐœ๋ฐœ ํ™˜๊ฒฝ

  • SpringBoot 2.4.5
  • Java 1.8
  • Gradle 6.8.3
  • IntelliJ

 

ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ

multi-module-sample
โ”œโ”€โ”€ multi-core-lib
โ”œโ”€โ”€ multi-scheduler
โ”œโ”€โ”€ multi-web
โ”œโ”€โ”€ gradle
  • multi-module-sample (Root Project)
    • multi-core-lib : scheduler, web์— ๊ณตํ†ต์œผ๋กœ ๋“ค์–ด๊ฐˆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    • multi-scheduler : scheduler ์„œ๋น„์Šค ํ”„๋กœ์ ํŠธ
    • multi-web : web ์„œ๋น„์Šค ํ”„๋กœ์ ํŠธ
    • gradle : Root Project gradle

Root Project ๋ฐ Sub Project(๋ชจ๋“ˆ) ๋งŒ๋“ค๊ธฐ

Root Project ๋งŒ๋“ค๊ธฐ

Gradle ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ
GroupId, ArtifactId ์ž‘์„ฑ
Root Project ์ƒ์„ฑ ์™„๋ฃŒ

Sub Project(๋ชจ๋“ˆ) ์ƒ์„ฑ

Root Project - ์œผ๋ก ์ชฝ๋งˆ์šฐ์Šคํด๋ฆญ - New - Module...
Gradle ๋ชจ๋“ˆ ์ƒ์„ฑ
Sub Project(๋ชจ๋“ˆ) ์ƒ์„ฑ
Sub Project(๋ชจ๋“ˆ) ์ƒ์„ฑ ์™„๋ฃŒ.. ๋‚˜๋จธ์ง€ ๋ชจ๋“ˆ๋“ค๋„ ์œ„์™€ ๊ฐ™์ด ์ƒ์„ฑํ•˜์„ธ์š”
Root Project์˜ src๋Š” ์‚ฌ์šฉ์„ ์•ˆํ•˜๋‹ˆ ์‚ญ์ œํ•ด์ฃผ์„ธ์š”
์ตœ์ข… ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ ๋ชจ์Šต

Root Project ๋ฐ Sub Project(๋ชจ๋“ˆ) gradle ์…‹ํŒ…

Root Project build.gradle ์ˆ˜์ •

plugins {
    id 'org.springframework.boot' version '2.4.5'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

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

    group = 'com.sample'
    version = '1.0.0'
    sourceCompatibility = '1.8'

    [compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
    tasks.withType(JavaCompile){
        options.encoding = 'UTF-8'
    }

    configurations {
        compileOnly {
            extendsFrom annotationProcessor
        }
    }

    repositories {
        mavenCentral()        
    }    
    //๊ฐ๊ฐ์˜ ๋ชจ๋“ˆ์— ๊ณตํ†ต์œผ๋กœ ๋“ค์–ด๊ฐˆ dependency
    dependencies {
        implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.4'
        annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
        testImplementation group: 'org.springframework.boot', name: 'spring-boot-starter-test'

        compileOnly 'org.projectlombok:lombok'
        annotationProcessor 'org.projectlombok:lombok'
    }

    test {
        useJUnitPlatform()
    }
}
//์Šค์ผ€์ฅด๋Ÿฌ ๋ชจ๋“ˆ์— ๋ฉ€ํ‹ฐ์ฝ”์–ด๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ dependency๋กœ ํฌํ•จ
project(':multi-scheduler') {
    dependencies {
        implementation project(':multi-core-lib')
    }
}
//์›น ๋ชจ๋“ˆ์— ๋ฉ€ํ‹ฐ์ฝ”์–ด๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ dependency๋กœ ํฌํ•จ
project(':multi-web') {
    dependencies {
        implementation project(':multi-core-lib')
    }
}

Root Project settings.gradle ์ˆ˜์ •

rootProject.name = 'multi-module-sample'
include 'multi-core-lib'
include 'multi-web'
include 'multi-scheduler'

๊ฐ ๋ชจ๋“ˆ build.gradle ์ˆ˜์ •

multi-core-lib build.gradle ์ˆ˜์ •

์ฝ”์–ด๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” main์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜์™€ ๊ฐ™์ด bootJar=false, jar=true ๋กœ ์„ค์ •ํ•ด์ค€๋‹ค.

bootJar {
    enabled(false)
}
jar {
    enabled(true)
}

dependencies {
    implementation group: 'joda-time', name: 'joda-time', version: '2.9.9'
}

multi-core-scheduler, web build.gradle ์ˆ˜์ •

//๊ฐ ๋ชจ๋“ˆ์— ํ•„์š”ํ•œ dependency๋ฅผ ๋„ฃ์–ด์ค€๋‹ค
dependencies {
    implementation group: 'joda-time', name: 'joda-time', version: '2.9.9'
}

Gradle Multi Module ๋นŒ๋“œ

//๋ฉ”์ธ์ด ๋  ๋ชจ๋“ˆ๋ช…:build
gradle multi-scheduler:build -x test
gradle multi-web:build -x test

 

Links

๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2024/09   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
๊ธ€ ๋ณด๊ด€ํ•จ
๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (71)
๐Ÿ“บ Develop (45)
๐ŸŒ‹ Error Fixed (5)
๐Ÿ— Tool (5)
๐Ÿ’ป MacBook M1 (15)
๐Ÿ“ฆ ETC (1)

์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค.