android-sdk 설치 실패 :“java.lang.NoClassDefFoundError : javax / xml / bind / annotation / XmlSchema” 해결할 수 있습니까? 디버그 출력

Android SDK 도구를 설치할 때 다음 오류가 발생합니다.

java.lang.NoClassDefFoundError : javax / xml / bind / annotation / XmlSchema

왜 이런 일이 발생하고 어떻게 해결할 수 있습니까?

디버그 출력 :

$ java --version
java 9
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)
$ brew cask install android-sdk
==> Caveats
We will install android-sdk-tools, platform-tools, and build-tools for you.
You can control android sdk packages via the sdkmanager command.
You may want to add to your profile:
  'export ANDROID_SDK_ROOT=/usr/local/share/android-sdk'

This operation may take up to 10 minutes depending on your internet connection.
Please, be patient.

==> Satisfying dependencies
==> Downloading https://dl.google.com/android/repository/sdk-tools-darwin-3859397.zip
Already downloaded: /Users/tomasnovella/Library/Caches/Homebrew/Cask/android-sdk--3859397,26.0.1.zip
==> Verifying checksum for Cask android-sdk
==> Installing Cask android-sdk
==> Exception in thread "main"
==> java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
==>     at com.android.repository.api.SchemaModule$SchemaModuleVersion.<init>(SchemaModule.java:156)
==>     at com.android.repository.api.SchemaModule.<init>(SchemaModule.java:75)
==>     at com.android.sdklib.repository.AndroidSdkHandler.<clinit>(AndroidSdkHandler.java:81)
==>     at com.android.sdklib.tool.SdkManagerCli.main(SdkManagerCli.java:117)
==>     at com.android.sdklib.tool.SdkManagerCli.main(SdkManagerCli.java:93)
==> Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema
==>     at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
==>     at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
==>     at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
==>     ... 5 more
Error: Command failed to execute!

==> Failed command:
/usr/local/Caskroom/android-sdk/3859397,26.0.1/tools/bin/sdkmanager tools platform-tools build-tools;26.0.1

==> Standard Output of failed command:


==> Standard Error of failed command:
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
    at com.android.repository.api.SchemaModule$SchemaModuleVersion.<init>(SchemaModule.java:156)
    at com.android.repository.api.SchemaModule.<init>(SchemaModule.java:75)
    at com.android.sdklib.repository.AndroidSdkHandler.<clinit>(AndroidSdkHandler.java:81)
    at com.android.sdklib.tool.SdkManagerCli.main(SdkManagerCli.java:117)


답변

오늘 아침에도 비슷한 문제가 발생했습니다 (Unity3D를 사용하여 Android 용 빌드하려고합니다). JDK9를 제거하고 Java SE Development Kit 8u144를 설치 했습니다 . 도움이 되었기를 바랍니다.

  1. brew cask uninstall java # java9 제거
  2. brew tap homebrew/cask-versions
  3. brew cask install java8 # java8 설치
  4. touch ~/.android/repositories.cfg #이 파일이 없으면 다음 단계에서 오류가 발생합니다
  5. brew cask install android-sdk

답변

이 오류를 해결하기 위해 Java 버전을 다운 그레이드 할 수 있습니다.

또는 터미널에서 다음 옵션을 내 보냅니다.

리눅스 / MAC :

export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'

윈도우 :

set JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'

그리고 당신은 수출이 수 영구적으로 저장 JAVA_OPTS(리눅스에서 내 프로필 파일 .zshrc, .bashrc등 등) 또는 Windows 영구적으로 환경 변수로 추가 할 수 있습니다.


추신. Java EE 모듈이없는 Java 11+에서는 작동하지 않습니다. 이 옵션을 사용하는 것이 좋습니다. Java 버전을 다운 그레이드하거나 Flutter 업데이트를 기다리십시오 .

참조 : JDK 11 : Java EE 모듈의 끝


답변

set JAVA_OPTS=-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee

이것은 Windows의 문제를 해결했습니다.

소스 1 , 소스 2


답변

Java 버전을 변경하지 않으려는 경우 (필요하지 않음) 쉘에서 일시적으로 버전을 변경할 수 있습니다.

첫 실행

/usr/libexec/java_home -V

그런 다음 설치 한 메이저 버전을 선택하십시오. 그렇지 않으면 먼저 설치하십시오.

export JAVA_HOME=`/usr/libexec/java_home -v 1.8`

이제 sdkmanager를 실행할 수 있습니다.


답변

Mac / Linux에서는 다음 명령을 사용하십시오.

export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'

스크립트 (sdkmanager, avdmanager) 패치하지 않고 JDK 9와 10 모두에서 작동합니다 .

Java 11의 경우 https://stackoverflow.com/a/51644855/798165를 참조하십시오.


답변

JDK 10 (또는 9)을 제거하지 않고도 나에게 도움이되는 두 가지 답변을 찾았습니다 create-react-app. JDK 9와 10은 모두 android-sdk와 호환되지 않습니다!


Siu Ching Pong -Asuka Kenji-sdkmanager다음 줄을 대체 하여 스크립트 수정을 제안합니다 .

DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME"'  

와:

DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME" -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'

sdkmanager를 업데이트 할 때이 모드를 덮어 씁니다.
자세한 내용은 그의 게시물과 그가 연결 한 게시물을 확인하십시오.
이 솔루션은 또한이 github 이슈 스레드 에서 언급 된 솔루션 중 하나였습니다 .


독일의 게시물 은 충돌의 원인을 나타내며 업데이트로 덮어 쓰지 않는 수정 사항을 제시합니다.
그는 /Library/Java/JavaVirtualMachines/Info.plist시스템에 상주하는 최고 버전의 Java를 찾는 스크립트에서 이름 을 가리는 방법으로 이름을 바꿀 것을 제안 합니다. 이런 식으로 JDK 8이 기본값으로 반환됩니다.
JDK 10을 명시 적으로 참조하거나로 설정하면 $JAVA_HOME필요할 때마다 기본값 대신 JDK 10을 사용할 수 있습니다.
세부 사항은 그의 게시물에 있습니다.


답변

프로파일에 다음을 추가해야합니다 (MacOS에서 작동).

export JAVA_HOME=`/usr/libexec/java_home -v 1.8`

아무것도 패치 할 필요가 없습니다.