使用Java 9无法运行sdkmanager --list

问题描述 投票:75回答:13

我已下载并安装:

  • 来自Oracle jdk-9.0.1_osx-x64_bin.dmg的JDK(here
  • 来自Google sdk-tools-darwin-3859397.zip的Android SDK(here)。

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

$ 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版本:

$ 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 android android-sdk-tools java-9 android-sdk-manager
13个回答
139
投票

this answer的帮助下,我成功解决了问题。

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

  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 --add-modules java.se.ee'
    
  4. 保存文件并退出编辑器。
  5. 再次运行命令。

这里是结果:

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

Hola!有效!

-编辑:2017-11-07-

[请注意,运行sdkmanager --update后,您可能需要再次应用上述修复程序,因为如果更新sdkmanager程序包,则tools Shell脚本可能会被覆盖。

相关答案


1
投票

在升级到最新版本之前,使用android sdk工具对openJDK 11进行了上述补充。


0
投票

https://adoptopenjdk.net当前支持从版本8开始的所有JDK发行版。例如https://adoptopenjdk.net/releases.html#x64_win


0
投票

对我而言,唯一可行的解​​决方案是使用Android Studio随附的Java。


0
投票

此错误的另一种解决方案是检查您的Java版本,也许您可​​以下载jdk oracle-jdk-8来解决它,这是我的错误:P


30
投票

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

示例:

export SDKMANAGER_OPTS="--add-modules java.se.ee"
sdkmanager --list

12
投票

对于Windows,如果没有任何作用,请尝试以下操作:

  • 用记事本打开sdkmanager.bat

  • 找到以下行:

    %JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %SDKMANAGER_OPTS%

  • 添加--add-modules java.xml.bind

修改后的行应如下所示:

%JAVA_EXE%" %DEFAULT_JVM_OPTS% --add-modules java.xml.bind %JAVA_OPTS% %SDKMANAGER_OPTS%


9
投票

如我们在前面的评论中所读,由于当前的SDK版本与最新的Java版本9和10不兼容,因此发生此错误。

因此,要解决该问题,您可以将Java版本降级为Java 8,或者作为一种变通办法,可以在终端上导出以下选项:

Linux:

export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'

Windows

set JAVA_OPTS=-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'

这将解决sdkmanager的错误

并且要使其永久保存,您可以将JAVA_OPTS导出到Linux上的配置文件中(.zshrc.bashrc等),或在Windows上永久添加为环境变量。


ps。

这不适用于没有Java EE模块的Java 11+。对于此选项是一个好主意,请降级Java版本或等待Flutter update

参考:JDK 11: End of the road for Java EE modules


8
投票

[在系统中具有Java 11时,提供的解决方案无效。


6
投票

Android工具仍然与JDK 9或10不兼容。您需要安装JDK 8,或者,如果需要多个Java版本,请确保系统范围的Java主页指向JDK 8。


5
投票

我很难添加一个可以正常工作的sdkmanager.bat来解决这个问题的解决方案


3
投票

我能够通过强制使用嵌入在Android Studio本身中的Java来使用已编辑的sdkmanager.bat文件来解决此问题,我假设使用的是OpenJDK8。这是我使用的已编辑sdkmanager:


2
投票

[已接受的答案截至2019年2月已过时。Here's an answersdkmanager迁移到Java的较新版本之前一直有效。但是到那时,您将不再有此问题。

© www.soinside.com 2019 - 2024. All rights reserved.