Back-end/Build (Gradle, Maven)

Gradle 멀티 모듈하면서 배운 것들

philo0407 2023. 5. 12. 02:15

Gradle을 통해서 멀티 모듈로 구성을 할 수 있다

 

나는 MSA를 하기 위해 구성했다

 

이렇게 하면 좋은 점 중 하나는 아래처럼 인텔리제이가 지원하는 기능을 사용할 수 있다

 

 

프로젝트 최상단에 build.gradle을 두면 각 모듈은 해당 파일을 기본적으로 먼저 해당 정보를 적용한다

 

allprojects {
	...
}

subprojects {
	...
}

 

allprojects는 루트 모듈과 모든 하위 모듈에 대해

subprojects는 루트 모듈을 제외한 모든 하위 모듈에 대해

적용을 하겠다는 block이다

 

이렇게 해서 공통 설정 정보를 몰아넣을 수 있다

 

만일 어떤 한 모듈만 루트의 build.gradle의 어느 한 의존성만 사용하고 싶지 않을 때가 있다

 

예를들어, 루트 build.gradle에는 톰캣 기반의 Spring Web 의존성이 있는데

딱 한 모듈, 즉 나의 경우엔 Spring Cloud는 네티 기반의 Spring Cloud Gateway 의존성이 있었다

 

실행하면 에러와 함께 Run Failed가 뜨는데
(아래는 오류 내용)

Spring Cloud Gateway; Spring MVC found on classpath, which is incompatible with Spring Cloud Gateway Issue

 

결국 아래와 같이 Spring Cloud Gateway 모듈(build.gradle)에서 의존성 예외처리를 해주었다

configurations {
    all*.exclude group: 'org.springframework.boot', module: 'spring-boot-starter-web'
}