본문 바로가기


Gradle

[Gradle] Dependency version 이 꼬였을 땐, Dependency Management

gradle version :gradle-5.5-bin.zip

ide : intellij idea 2019.1

 

잡소리서론

개발을 하다보면 전부 구현해서 쓸수 없으니까 여러가지 디펜던시를 설정해서 다양한 외부라이브러리들을 사용하게 된다.

하지만 그 라이브러리들 또한 다양한 외부 라이브러리들을 사용하게되고 

한프로젝트 내에 다양한 모듈 그리고 다양한 라이브러리들을 사용하다보면 서로 버전이 안맞게 되고 guava 같이 하위버전 호환을 잘 안 해주지만
엄청나게 많은 라이브러리에서 사용하고 있는 애들이 간혹있다.

compile 말고 implementation 를 사용하면 좀 더 버전을 깔끔하게 할 수 있지만 오억개의 라이브러리를 디펜던시하고있는 라이브러리를 사용할땐 여간 불편한게 아니다. 

최근에 netty 관련 라이브러리에서 사용하는 guava랑 내가 개발하는 프로젝트의 guava랑 버전충돌이 나는데 exclude 신공을 때렸지만 웬일인지 잘 먹지 않았다. 거기서 내게 구원을 손길을 내밀어 준게 바로

Dependency Management

이것이다. gradle 플러그인인데 상위 루트프로젝트의 build.gradle 파일에 설정해주면 하위 모듈까지 싹 다 아름답게 버전을 맞춰준다. 

설명은 이정로도 하고 자세한 내용은 아래 링크를 첨부해 두겠다.

사용법

//root project build.gradle
buildscript {
    repositories {
        maven { url 'https://repo.spring.io/plugins-snapshot' }
    }
    dependencies {
        classpath 'io.spring.gradle:dependency-management-plugin:1.0.7.BUILD-SNAPSHOT'
    }
} 
 
...
 
 
subprojects {
...
   apply plugin: 'io.spring.dependency-management'
   dependencyManagement {
      dependencies {
         ...
         //모든 module dependency version 통일
         dependency "com.google.guava:guava:27.1-jre"
         ...
         //모든 module 해당 dependency에 exclude 적용
         dependency('org.springframework:spring-core:4.0.3.RELEASE') {
             exclude 'commons-logging:commons-logging'
        }
      }
   }
...
 
 
//module build.gradle
...
dependencies {
    //version 27.1-jre 으로 버전이 설정 됨
    compile("com.google.guava:guava")
}
...

 

참조

https://docs.spring.io/dependency-management-plugin/docs/current/reference/html/

 

끝!