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

5 篇文章 1 订阅
1 篇文章 0 订阅

今天执行 flutter doctor -v 的时候发现一个问题,提示信息是

[!] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
    • Android SDK at /Users/zhaopingfu/Library/Android/sdk
    • Platform android-S, build-tools 30.0.2
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.8+10-b944.6916264)
    ✗ Android license status unknown.
      Run `flutter doctor --android-licenses` to accept the SDK licenses.
      See https://flutter.dev/docs/get-started/install/macos#android-setup for more details.

然后根据提示信息执行 flutter doctor --android-licenses,发现报错了,错误信息是

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.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

通过 java -version 查看了 java 版本是 1.8

java version "1.8.0_281"
Java(TM) SE Runtime Environment (build 1.8.0_281-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.281-b09, mixed mode)

网上好多说是 jdk 版本的问题,但是我的 jdk 就是 1.8,尝试了 jdk 升级到 11 再回退到 1.8 还是不行,所以排除这种情况

最后通过查找各种资料找到了解决办法

  1. 打开 AndroidStudio 中的 SdkManager
  2. 下载最新版本的 Android SDK Command-lines Tools,如下图所示
    在这里插入图片描述
  3. 重新运行 flutter doctor --android-licenses,提示信息为
[=========                              ] 25% Fetch remote repository...
7 of 9 SDK package licenses not accepted. 100% Computing updates...
Review licenses that have not been accepted (y/N)?
  1. 运行 flutter doctor -v,提示信息为
• No issues found!

参考资料: https://www.dev2qa.com/how-to-fix-java-lang-noclassdeffounderror-javax-xml-bind-annotation-xmlschema-when-install-android-sdk/

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这是一个Java程序运行时的错误,错误信息为“exception in thread "main" java.lang.noclassdeffounderror: javax/xml/bind/annotation/xmlschema”。这个错误通常是由于缺少Java类库中的某些类所导致的。解决方法是检查程序所依赖的类库是否完整,并确保程序能够正确地访问这些类库。如果问题仍然存在,可以尝试更新Java环境或重新安装Java。 ### 回答2: 这个异常通常在使用JDK的较新版本时会抛出,因为在JDK9之后,Java SE的一些模块被移除或标记为过时,其中包括JAXB模块,这导致JAXB所需的库和类文件无法找到。 为了解决这个问题,我们需要手动添加JAXB所需的库和类文件,具体方法如下: 1. 在项目中添加jaxb-api.jar和jaxb-core.jar两个库文件。这两个库文件可以在Maven仓库或者JDK安装目录下找到。 2. 如果您使用的是JDK11及以上版本,则还需要添加jaxb-impl.jar库文件。 3. 如果您使用的是Maven项目,可以在pom.xml文件中添加以下依赖: <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>${jaxb-api.version}</version> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-core</artifactId> <version>${jaxb-core.version}</version> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>${jaxb-impl.version}</version> </dependency> 其中,${jaxb-api.version}、${jaxb-core.version}和${jaxb-impl.version}需替换为对应的版本号。 4. 在项目的启动配置中添加以下JVM参数: --add-modules java.xml.bind 这个参数会把JAXB模块加入到Java运行时环境中。 通过以上方法,我们就可以解决“exception in thread "main" java.lang.noclassdeffounderror: javax/xml/bind/annotation/xmlschema”的问题了。 ### 回答3: 这个错误通常意味着你正在使用一个Java应用程序或库,该应用程序或库使用了以前存在于Java SE中的某些类,但在Java SE 9或更高版本中已被删除或已移到一个不同的模块。 在这种情况下,你需要更新你的应用程序或库,以便它可以使用新的Java SE 9或更高版本中的类。 这个错误的一个常见的原因是你正在使用一个旧版本的JAXB API来解析XML数据。Java SE 9及更高版本中已删除了javax.xml.bind模块,因此如果你试图在这些版本中运行使用该模块的代码,你将收到该错误。 为了解决这个问题,你可以升级你的JAXB API,或者使用新的Java SE 9中包含的jaxb-api模块来代替旧的javax.xml.bind模块。 你还可以使用在Java SE 9或更高版本中提供的其他XML API,例如DOM,SAX或StAX,来解析XML数据。 如果你正在使用一个第三方库来处理XML数据,请检查该库是否已更新以支持Java SE 9或更高版本的API。 在解决这个错误时,你应该注意,Java SE 9及更高版本中的其他模块也可能已被删除或移动。如果你在使用其他库或应用程序时遇到了类似的错误,请仔细查看错误消息,并查看Java SE文档以确定该类是否已被删除或移动。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值