환경: Mac os 10.15.1
현상:
아마 새 맥북에서 최신 버전으로 모든걸 세팅하고 나서, Android studio에서 코틀린을 gradlew 로 빌드하려면 빌드가 안될겁니다.
> ./gradlew assembleDebug
Task :app:kaptDebugKotlin FAILED e: java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException at java.base/java.lang.Class.getDeclaredConstructors0(Native Method)
....
원인: JAXBException 가 Java8 에서 지원되던 녀석인데, Java11 에서 제거되어서 그렇습니다.
해결방법: Java11 을 지우고 Java8을 설치하면 되는데.... 척 봐도 왠지 해서는 안될 일로 보입니다.
-> 그래서 검색을 좀 해봤더니, https://discuss.gradle.org/t/android-studio-gradle-build-error/32108/5
역시나 이미 비슷한 일을 겪은 사람이 있습니다. 이 분이 추천해 준 방법은 sdk man을 이용하는 것.
sdk man은 시스템에 여러 라이브러리를 설치하고, 실시간으로 버전을 바꿔가며 쓸 수 있게 해주는 라이브러리입니다.
과정 1: sdk man을 설치합니다.
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk version
과정 2: sdk man을 이용하여 Java8을 다운로드 받습니다.
다운로드 받을 수 있는 버전 확인하기:
sdk list java
설치:
sdk install java 8.0.232.j9-adpt
sdk use java 8.0.232.j9-adpt
sdk current
과정 3: 다시 빌드를 해봅니다.
./gradlew assembleDebug
빌드 성공.
참고: 커맨드라인에서 빌드할 일은 거의 없지만, 빌드 속도증가를 위해 빌드 프로파일링을 할 때는 이런 방법이 필요합니다.
./gradlew --profile --offline --rerun-tasks assembleDebug
'Android' 카테고리의 다른 글
[펌] Blocking vs Non-blocking / Synchronous vs Asynchronous (0) | 2020.01.30 |
---|---|
Kotlin coroutine - Job or Deferred? (0) | 2019.12.25 |
RxDogTag - RxJava 오류 시, 스택 트레이스를 알아보기 쉽게 (0) | 2019.08.05 |
Android 에서 Flexbox 같은 UI (0) | 2019.04.30 |
특정 레이아웃의 실제 크기를 단말에서 확인하기 - VQA (0) | 2019.04.09 |