Oracle Java 9.0.1环境下sdkmanager启动失败求助
解决Java 9下SDK Manager启动失败的问题
嘿,这个问题我太熟了!你遇到的是Java 9+和旧版Android SDK Manager之间的兼容性冲突——从Java 9开始,Oracle把javax.xml.bind这类Java EE模块从默认类路径中移除了,但你的SDK Manager还依赖这些类,所以才会抛出NoClassDefFoundError。
下面给你三个可行的解决方案,按便捷性和长期适用性排序:
1. 临时启动时添加JVM参数(快速解决)
每次运行sdkmanager时,手动加上指定模块的JVM参数,让Java运行时加载缺失的类:
./sdkmanager --list --add-modules java.se.ee
如果想更精准地指定所需模块(避免加载不必要的模块),可以用:
./sdkmanager --list --add-modules javax.xml.bind,javax.activation,javax.xml.ws.annotation
执行这个命令后,SDK Manager应该就能正常列出包了。
2. 设置环境变量(一劳永逸)
不想每次都输冗长的参数?可以把JVM参数加到shell的环境变量里:
- 打开你的shell配置文件(比如
~/.bashrc、~/.zshrc或者~/.profile) - 添加一行:
export JAVA_OPTS="--add-modules java.se.ee" - 保存后执行
source ~/.bashrc(对应你的配置文件),让设置生效
之后再运行./sdkmanager --list就不用额外加参数了。
3. 降级到Java 8(最稳妥的长期方案)
Android官方长期推荐使用Java 8来处理SDK工具,因为很多旧版Android开发工具对Java 9+的兼容性都不佳。如果条件允许,建议直接安装Java 8并设为默认版本:
- 安装Oracle Java 8或OpenJDK 8
- 用系统的Java版本管理工具切换,比如Linux下的
update-alternatives:sudo update-alternatives --config java - 在弹出的选项中选择Java 8的条目即可
这个方案不仅能解决当前的SDK Manager问题,还能避免后续Android开发中遇到其他兼容性坑。
补充:如果之后你把Android SDK Tools更新到较新版本,可能就不需要上述操作了——新版的SDK Manager已经适配了Java 9+环境。
内容的提问来源于stack exchange,提问作者user8110081
相关产品推荐
相关产品推荐

