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/