(kotlin 사용중)
문제
갑자기 jackson objectMapper 가 제네릭 타입추론을 못한다는 에러가 발생함
변경점은 build.gradle 에 jasperreports 의존성만 추가한 것 밖에 없었다.
원인 찾기
실제 다운 받은 라이브러리 확인
jackson.core 가 버전이 3개나 된다.
뭔가 현재 프로젝트에 원하지 않은 라이브러리까지 추가된거 같다.
그렇다면 현재 사용중인 jackson.core 는 무엇인가?
gradle dependencies.tree 를 확인하면 된다.
intellij 를 먼저 이용해보자.
Gradle 윈도우 - 원하는 프로젝트 - Show Dependencies...
뭐가 엄청 많이 나오니까 cmd+f 로 찾자
그리고 계층구조를 잘 보기 위해서 Show Paths 를 누르면 잘 나옴
뭔가 jasperreports 하 하나 더 끼워졌다. 근데 버전이 무엇무엇 있고, 어떤 버전을 쓰는지는 잘 안나오는듯하다.
커맨드 라인에서
$> ./gradlew :프로젝트이름:dependencies
아래를 보면 2.9.10 을 쓰겠다는거 같은데... 실제 소스코드를 따라가보면 2.10.0.jar 로 이동함
com.fasterxml.jackson.core:jackson-annotations:2.10.0 -> 2.9.10
해결방법
1. 멀티프로젝트 일때 루트 프로젝트 build.gradle 에 버전 명시
subprojects {
...
dependencies {
implementation "com.fasterxml.jackson.core:jackson-databind:$jacksonVersion"
...
하지만 실제로는 서브 프로젝트에서 받은 라이브러리 버전이 latest 이면 서브 프로젝트에서 받은 버전을 사용함
-> 이걸로 해결 못함
2. 서브 프로젝트에서 의존성 추가할 때 중복되는 라이브러리는 제외
dependencies {
// jasperreports
implementation("net.sf.jasperreports:jasperreports:$jasperreportsVersion") {
exclude group: "com.fasterxml.jackson.core"
}
해결은 되지만 모든 의존성 추가에서 하기는 힘듬
-> 해결은 되지만 의존성 추가가 복잡해짐
3. 버전 충돌시 어떻게 할지 명시, 모든 프로젝트를 1개의 버전으로 통일
subprojects {
...
configurations.all {
resolutionStrategy {
force "com.fasterxml.jackson.core:jackson-databind:$jacksonVersion"
}
}
해결됨
-> 하지만 version update 가 어렵다는 단점은 있다.
'트러블슈팅' 카테고리의 다른 글
[JPA] OneToMany 에서 child 를 지웠는데 update 쿼리가 날아간다고? (0) | 2020.11.05 |
---|---|
[Kotlin] Contracts (0) | 2020.08.04 |
[Aws] s3 cors 에러 (0) | 2020.07.03 |
[Python] pandas.read_csv 에서 ssl 오류 (0) | 2020.04.04 |
[Spring] Spring boot 에서 mongoDB 붙이기 (0) | 2020.01.08 |