멀티모듈빌딩

공부하면서 기억에 남는 빌드, 및 정보

Jungsoomin :) 2020. 12. 14. 22:20

굳이 하위 모듈이 아니여도 다른 레벨의 모듈을 가져다가 쓸 수 있다.

  • build.gradle 에 명시한 하위 관계일 경우에만 dependcy 를 추가할 수 있는 줄 알았으나 아니다.
  • : 는 절대경로를 나타나며 없다면 상대경로를 나타내고 있는 것으로 보인다.
  • implementation project 로 종속관계를 주어 Gradle 란에 CompileScope 에 의존 화살표가 안떠도 작동한다.
  • 스프링 부트 메인 클래스 가 없는 프로젝트는 BootJar 사이클에 에러가 나고 , 의존하는 프로젝트에 직접 작성한 소스를 쓰려면 Jar 사이클을 주어 jar 로 패키징 해야 build 가 된다.
  • 빈 모듈 안에 모듈들을 집어 넣으려면 Java 가 아니라 그냥 Gradle 기반 모듈을 만든다.

최상위 모듈 setting

rootProject.name = 'basic-rest-service'
include 'api'
include 'util'
include 'micro-services:product-composite-service'
include 'micro-services:product-service'
include 'micro-services:recommendation-service'
include 'micro-services:review-service'

하위 레벨의 Gradle 모듈 build => 해당 파일은 메인 메서드 없이 필요한 공통 클래스, 인터페이스 만을 모아두는 중

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

group = 'com.study'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'org.springframework.boot:spring-boot-starter-webflux'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'io.projectreactor:reactor-test'
}

test {
    useJUnitPlatform()
}

bootJar{
    enabled = false
}

jar{
    enabled = true
}

Root Module 하위의 micro-services 라는 gradle 모듈 하위에 있는 서비스 모듈들의 build

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

group = 'com.study'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
    mavenCentral()
}

dependencies {
    implementation project(':api')
    implementation project(':util')
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'org.springframework.boot:spring-boot-starter-webflux'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'io.projectreactor:reactor-test'
}

test {
    useJUnitPlatform()
}

프로젝트 구조빈 프로젝트 => 공통 util 및 domain, Service 를 정의한 api Gradle 모듈 / Gradle 기반 micro-services 모듈 => 4개의 SpringInitializer 서비스


api 프로젝트에 정의된 Service API 의 인터페이스 

 

api 모듈에 의존하는 Service 에서 구현


최상위 Project 에서 Build 사이클을 돌렸을 때 하위 모듈까지 전부 빌딩이 되야한다.

Jpa 쓰다가 implementation 스코프면 SimpleJpaRepository 의 메서드를 호출 못하는 상황을 경험해봐서 Gradle 란에 제대로 의존이 파악되나 자꾸 보게된다.

 

빌딩 완료 후 java -jar 로 실행한 결과 포트 잘나오고 있다..

curl 로 확인

'멀티모듈빌딩' 카테고리의 다른 글

Spring Initializer 기반 멀티모듈 빌드  (0) 2020.12.13
그레이들 멀티 모듈 빌드  (0) 2020.12.05