dkmanager Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema at com.android.repository.api.SchemaModule$SchemaModuleVersion.一堆人說,用studio 的 sdkmanager 安裝 commandline-tools 之後就好了。(SchemaModule.java:156) at com.android.repository.api.SchemaModule. (SchemaModule.java:75) at com.android.sdklib.repository.AndroidSdkHandler. (AndroidSdkHandler.java:81) at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:73) at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:48) Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) ... 5 more
結果裝了還是一樣 的錯。
後來發現...
裝了 cmdline-tools 後,裡面也有一個 sdkmanager, run 這個 sdkmanager 就不會有 error 了。
這兩個 sdkmanager 都是 shell script,所以來diff 一下...
cmdline-tools/latest/bin$ diff sdkmanager ../../../tools/bin/sdkmanager 5c5 < ## sdkmanager start up script for Linux --- > ## sdkmanager start up script for UN*X 31c31 < DEFAULT_JVM_OPTS='-Dcom.android.sdklib.toolsdir=$APP_HOME' --- > DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME"' 67c67 < CLASSPATH=$APP_HOME/lib/sdkmanager-classpath.jar --- > CLASSPATH=$APP_HOME/lib/dvlib-26.0.0-dev.jar:$APP_HOME/lib/jimfs-1.1.jar:$APP_HOME/lib/jsr305-1.3.9.jar:$APP_HOME/lib/repository-26.0.0-dev.jar: $APP_HOME/lib/j2objc-annotations-1.1.jar:$APP_HOME/lib/layoutlib-api-26.0.0-dev.jar:$APP_HOME/lib/gson-2.3.jar:$APP_HOME/lib/httpcore-4.2.5.jar: $APP_HOME/lib/commons-logging-1.1.1.jar:$APP_HOME/lib/commons-compress-1.12.jar:$APP_HOME/lib/annotations-26.0.0-dev.jar: $APP_HOME/lib/error_prone_annotations-2.0.18.jar:$APP_HOME/lib/animal-sniffer-annotations-1.14.jar:$APP_HOME/lib/httpclient-4.2.6.jar: $APP_HOME/lib/commons-codec-1.6.jar:$APP_HOME/lib/common-26.0.0-dev.jar:$APP_HOME/lib/kxml2-2.3.0.jar:$APP_HOME/lib/httpmime-4.1.jar: $APP_HOME/lib/annotations-12.0.jar:$APP_HOME/lib/sdklib-26.0.0-dev.jar:$APP_HOME/lib/guava-22.0.jar果然就是 classpath,猜是 tools/bin 是給 studio 用的,它已經default 有一些 jar 了。
cmdline-tools 的才是給 command line 用的。
其實這是要 Accept Android SDK/tool licenses 時遇到的。
用 sdkmanager --licenses 來 accept 所有 license。
accept 之後,會在 Android/Sdk/License 中出現很多 license 檔。
沒有留言:
張貼留言