"java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema" 在接受 SDK 许可证时出现
"java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema" 在接受 SDK 许可证时出现
好的,所以我正在尝试使用Android Studio构建我的React-Native应用程序。当我构建时,首先遇到了以下错误:
无法安装以下Android SDK软件包,因为某些许可证尚未被接受。 build-tools;29.0.2 Android SDK Build-Tools 29.0.2 要构建此项目,请接受SDK许可协议,并使用Android Studio SDK Manager安装缺少的组件。 或者,要将许可协议从一个工作站转移到另一个工作站,请参阅http://d.android.com/r/studio-ui/export-licenses.html 使用的Android SDK:C:\Users\jaspe\AppData\Local\Android\Sdk
在解决这个问题时,我发现了这个答案,告诉我要接受许可证。然而,在尝试这样做时,我遇到了以下错误:
C:\Users\jaspe\AppData\Local\Android\Sdk\tools\bin>sdkmanager --licenses Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema at com.android.repository.api.SchemaModule$SchemaModuleVersion.(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
为了解决这个问题,我发现了这篇帖子。我没有使用brew,但我尝试了第二个答案。很遗憾,它没有起作用。然后我发现我没有安装JDK,所以我安装了它。但是,即使安装了最新的JDK,我仍然遇到异常:
C:\Users\jaspe\AppData\Local\Android\Sdk\tools\bin>sdkmanager.bat -licenses Error occurred during initialization of boot layer java.lang.module.FindException: Module java.xml.bind not found
现在我不确定该怎么做了。我找到了一个回答解释说我需要编辑我的项目设置,但我认为这不适用于我的项目,老实说我有点困惑。有没有人遇到过这些错误,并可以帮助我解决它们?我整个早上都在试图解决这个问题,我本以为构建一个可运行的.APK作为演示会更容易...
问题原因:在执行AndroidSetup.bat脚本时,脚本尝试调用错误位置的sdkmanager.bat文件。
解决方法:编辑AndroidSetup.bat文件(第61行),将路径更正为正确的位置。
当我尝试设置Unreal Engine v4.25.4时,遇到了一个错误。我需要运行Unreal Engine附带的一个批处理脚本,位于以下位置:
C:\Program Files\Epic Games\UE_4.25\Engine\Extras\Android\SetupAndroid.bat
然而,执行脚本时出现了以下错误:
Android Studio Path: C:\Program Files\Android\Android Studio Android Studio SDK Path: C:\Users\brianb\AppData\Local\Android\Sdk Using sdkmanager: C:\Users\brianb\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema at com.android.repository.api.SchemaModule$SchemaModuleVersion.(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 Update failed. Please check the Android Studio install. Press any key to continue . . .
即使我根据MatPag的答案找到了sdkmanager.bat文件并执行了它,我的AndroidSetup.bat脚本仍然失败。
最终,我意识到AndroidSetup.bat脚本尝试从错误的位置调用sdkmanager.bat。
为了修正路径,我编辑了AndroidSetup.bat文件(第61行)如下:
:: set SDKMANAGER=%STUDIO_SDK_PATH%\tools\bin\sdkmanager.bat set SDKMANAGER=%STUDIO_SDK_PATH%\cmdline-tools\latest\bin\sdkmanager.bat
这样一来,问题得到了解决。
出现问题的原因是使用了错误的sdkmanager,并且tools目录已经被弃用。解决方法是打开Android Studio并安装最新的命令行工具。这将在Android SDK中创建一个名为"...\Android\Sdk\cmdline-tools\latest\bin"的文件夹。然后使用bin目录中的sdkmanager来接受所有许可证。可以通过命令行界面执行以下命令来完成操作:
C:\Users\jaspe\AppData\Local\Android\Sdk\cmdline-tools\latest\bin>sdkmanager.bat --licenses
之前的sdkmanager工具已经从/tools/bin目录移动到/cmdline-tools/latest/bin目录。这是唯一的解决方案。
最后,将cmdline-tools/latest/bin添加到路径中,以便cordova工作正常。
经过这些步骤后,XmlSchema的问题将得到解决。