일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Android
- 코틀린
- Flutter
- 파이썬
- ASMR
- DART
- 오픈소스
- recyclerview
- Firebase
- 이모지메모
- Coroutine
- Freesound
- 좋은글필사하기
- jetpack compose
- 공자명언
- Streaming
- bash
- 벤자민플랭클린
- kotlin
- Linux
- 소울칼리버6
- 장자명언
- 1인개발자
- androidx
- 넷플릭스
- 이모지
- 명심보감
- 공부집중
- 명언모음
- FSM
Archives
- Today
- Total
Vintage appMaker의 Tech Blog
[gradle] java 버전에러 - if 문 처리 (e: java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException) 본문
Source code or Tip/Android(Java, Kotlin)
[gradle] java 버전에러 - if 문 처리 (e: java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException)
VintageappMaker 2021. 6. 17. 07:45몇년전 문제없이 돌아가던 프로젝트 소스가 최신 Android Studio에서 에러가 발생했다.
e: java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
자바버전 에러이다. 자바의 버전이 업그레이드 되면서 이전의 종속성 몇 개가 삭제되었는데, gradle에서 수동으로 추가해주어야 한다. 문제는 어떤 개발환경에서는 java 1.8 환경으로 되어 있기에 java 1.8이상을 사용하는 PC 처럼 종속성을 지정하기에 껄끄러운 경우가 발생한다는 것이다. 그럴경우,
java version을 참고하여 선택적 implementation할 수 있다.
Gralde은 Groovy 문법을 사용하기에 다음과 같은 코드로 선택적 종속성 처리가 가능하다.
// jdk 1.8이상이면 아래 모듈들이 삭제되었기에
// 다시 가져와야 한다.
if(JavaVersion.current() != JavaVersion.VERSION_1_8){
kapt "com.sun.xml.bind:jaxb-core:2.3.0.1"
kapt "javax.xml.bind:jaxb-api:2.3.1"
kapt "com.sun.xml.bind:jaxb-impl:2.3.2"
annotationProcessor "com.sun.xml.bind:jaxb-core:2.3.0.1"
annotationProcessor "javax.xml.bind:jaxb-api:2.3.1"
}
위와 같이하면 자바버전에 따라 문제없이 처리가능하다.
그러나 진짜 문제는 Gradle에서 저런 식의 조건문이 보였다는 것이다. 경험상 개발환경의 변수가 존재한다는 것 자체가 어떤 식으로든지 나중에는 문제가 발생할 여지가 높기 때문이다.
'Source code or Tip > Android(Java, Kotlin)' 카테고리의 다른 글
[XML] Android Progress Vertical로 만들기 (0) | 2021.06.22 |
---|---|
[kotlin] 확장함수를 이용한 간편한 AlphaAnimation (0) | 2021.06.21 |
[kotlin] apply에서 람다 사용시 범위(scope) (0) | 2021.06.12 |
[Android] PopupWindow 사용 - closure 예제 (0) | 2021.05.30 |
화면 회전시 Layout 변경 (0) | 2021.05.22 |
Comments