首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未能使用Java 9运行sdkmanager -list

未能使用Java 9运行sdkmanager -list
EN

Stack Overflow用户
提问于 2017-11-07 05:11:40
回答 30查看 151K关注 0票数 123

我下载并安装了:

  • 来自甲骨文的JDK (jdk-9.0.1_osx-x64_bin.dmg)
  • Android (sdk-tools-darwin-3859397.zip)来自Google 这里

配置PATH变量后,我尝试运行sdkmanager,它取代了用于管理SDK组件的android命令。但是,它失败了,如下所示:

代码语言:javascript
复制
$ sdkmanager --list
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

以下是Java版本:

代码语言:javascript
复制
$ java -version
java version "9.0.1"
Java(TM) SE Runtime Environment (build 9.0.1+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)

有人知道如何在不返回Java 8的情况下修复它吗?

相关问题

警告

请注意,我前面已经提到过,返回到Java 8或并行运行它是而不是

EN

回答 30

Stack Overflow用户

发布于 2017-11-07 05:11:40

这个答案的帮助下,我成功地解决了这个问题。

我们将在sdkmanager中应用一个修复程序。这是一个shell脚本。它位于$android_sdk/tools/bin$android_sdk是您解压缩Android的地方。

  1. 在您最喜欢的编辑器中打开sdkmanager
  2. 找到设置DEFAULT_JVM_OPTS变量的行。在我的副本中,它在第31行: DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME"‘
  3. 将下列选项附加到变量:-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee请注意引号。在我的副本中,行如下: DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME“-XX:+IgnoreUnrecognizedVMOptions --添加模块java.se.ee‘
  4. 保存文件并退出编辑器。
  5. 再运行一次命令。

结果如下:

代码语言:javascript
复制
$ sdkmanager --list
Installed packages:
  Path    | Version | Description              | Location
  ------- | ------- | -------                  | ------- 
  tools   | 26.0.1  | Android SDK Tools 26.0.1 | tools/  

Available Packages:
  Path                              | Version      | Description                      
  -------                           | -------      | -------                          
  add-ons;addon-g..._apis-google-15 | 3            | Google APIs                      
  add-ons;addon-g..._apis-google-16 | 4            | Google APIs                      
  add-ons;addon-g..._apis-google-17 | 4            | Google APIs                      
  add-ons;addon-g..._apis-google-18 | 4            | Google APIs                      
  add-ons;addon-g..._apis-google-19 | 20           | Google APIs                      
  add-ons;addon-g..._apis-google-21 | 1            | Google APIs                      
  add-ons;addon-g..._apis-google-22 | 1            | Google APIs                      
  add-ons;addon-g..._apis-google-23 | 1            | Google APIs                      
  add-ons;addon-g..._apis-google-24 | 1            | Google APIs
...

你好!它起作用了!

-编辑: 2017-11-07

请注意,您可能需要在运行sdkmanager --update后再次应用上述修复,因为如果更新sdkmanager包,则可能会重写sdkmanager外壳脚本。

相关答案

票数 166
EN

Stack Overflow用户

发布于 2019-08-30 20:33:06

接受的答复在2019年2月已经过时。这是一个答案,它将在sdkmanager迁移到更新版本的Java之前工作。但到那时,你就不会再有这个问题了。

OpenJDK 10被OpenJDK 11所取代,它根本不实现java.se.ee。这意味着添加--add-modules java.se.ee的黑客不再做任何事情了。这也意味着,如果您的更新配置正确,OpenJDK 10将自动从您的系统中删除,并在下次更新时使用OpenJDK 11替换。 通过将sdkmanager内部的JAVA_HOME设置为Java8安装,修改sdkmanager以使用Java8。默认情况下,这里是~/Android/Sdk/tools/bin/sdkmanager.Add的默认JVM选项。您还可以在这里使用JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64 DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME“和SDKMANAGER_OPTS传递JVM选项$ JAVA_OPTS -XX:+IgnoreUnrecognizedVMOptions‘@rem添加默认JVM选项。您还可以使用JAVA_OPTS和SDKMANAGER_OPTS将JVM选项传递给此脚本。设置JAVA_HOME="C:\ProgramData\scoop\apps\android-studio\current\jre“集DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0..” 这样,您可以在您的系统上继续使用sdkmanager.Java export _HOME=/usr/lib/jvm/default,同时在您的系统上使用一个正常和维护的Java版本,现在我有一些输油管道需要修复。

票数 46
EN

Stack Overflow用户

发布于 2018-02-09 11:22:08

您可以使用SDKMANAGER_OPTS设置sdkmanager选项。

示例:

代码语言:javascript
复制
export SDKMANAGER_OPTS="--add-modules java.se.ee"
sdkmanager --list
票数 40
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47150410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档