Ao instalar as ferramentas do Android SDK, o seguinte erro é emitido:
java.lang.NoClassDefFoundError: javax / xml / bind / annotation / XmlSchema
Por que isso está acontecendo e como pode ser corrigido?
Saída de depuração:
$ java --version
java 9
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)
$ brew cask install android-sdk
==> Caveats
We will install android-sdk-tools, platform-tools, and build-tools for you.
You can control android sdk packages via the sdkmanager command.
You may want to add to your profile:
'export ANDROID_SDK_ROOT=/usr/local/share/android-sdk'
This operation may take up to 10 minutes depending on your internet connection.
Please, be patient.
==> Satisfying dependencies
==> Downloading https://dl.google.com/android/repository/sdk-tools-darwin-3859397.zip
Already downloaded: /Users/tomasnovella/Library/Caches/Homebrew/Cask/android-sdk--3859397,26.0.1.zip
==> Verifying checksum for Cask android-sdk
==> Installing Cask android-sdk
==> 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
Error: Command failed to execute!
==> Failed command:
/usr/local/Caskroom/android-sdk/3859397,26.0.1/tools/bin/sdkmanager tools platform-tools build-tools;26.0.1
==> Standard Output of failed command:
==> Standard Error of failed command:
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)
/Library/Java/JavaVirtualMachines
openjdk-8-jdk
eopenjdk-11-jdk
. Alguém sabe o que instalarjavax/xml/bind/annotation/XmlSchema
ou como evitarjavax/xml/bind/annotation/XmlSchema
no NDK?Respostas:
Eu tive um problema semelhante nesta manhã (tentando criar para o Android usando o Unity3D). Acabei desinstalando o JDK9 e instalando o Java SE Development Kit 8u144 . Espero que isto ajude.
brew cask uninstall java
# uninstall java9brew tap homebrew/cask-versions
brew cask install java8
# install java8touch ~/.android/repositories.cfg
# sem esse arquivo, ocorrerá um erro na próxima etapabrew cask install android-sdk
fonte
brew cask install homebrew/cask-versions/java8
brew cask install homebrew/cask-versions/adoptopenjdk8
parece funcionarPara resolver esse erro, você pode fazer o downgrade da sua versão Java.
Ou exporta a seguinte opção no seu terminal:
Linux / MAC:
Windows :
E para salvá-lo permanentemente, você pode exportar o
JAVA_OPTS
arquivo do seu perfil no linux (.zshrc
,.bashrc
e etc.) ou adicionar como variável de ambiente permanentemente no Windows.ps. Isso não funciona para o Java 11+, que não possui módulos Java EE. Para essa opção, é uma boa idéia, faça o downgrade da sua versão Java ou aguarde uma atualização do Flutter .
Ref: JDK 11: Fim da estrada para módulos Java EE
fonte
Isso corrigiu o problema no Windows para mim.
Fonte 1 , fonte 2
fonte
export
notset
) e resolveu o problema.export JAVA_OPTS = '-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
no Ubuntu 18.04Se você não deseja alterar sua versão do Java (eu não), você pode alterar temporariamente a versão no seu shell:
Primeira corrida
Em seguida, escolha uma versão principal, se a tiver instalada, caso contrário, instale-a primeiro:
Agora você pode executar o sdkmanager.
fonte
$ /usr/libexec/java_home -V
dábash: /usr/libexec/java_home: No such file or directory
.apt-file search /usr/libexec/java_home
não dá exatamente nada.echo "export JAVA_HOME=`/usr/libexec/java_home`" >> ~/.bashrc
(ou perfil se você usar o perfil) - recarregar:. ~/.bashrc
/usr/libexec
. Você está no MacOS? (Estou no Ubuntu / Linux e Ubuntu / Windows)No Mac / Linux, use o seguinte comando:
Funciona para o JDK 9 e 10, sem corrigir nenhum script (sdkmanager, avdmanager).
Para Java 11, consulte: https://stackoverflow.com/a/51644855/798165
fonte
Encontrei duas respostas que funcionaram para mim, sem ter que desinstalar o JDK 10 (ou 9), o que eu preciso
create-react-app
. JDK 9 e 10 são incompatíveis com android-sdk!Siu Ching Pong -Asuka Kenji- sugere modificar o
sdkmanager
script, substituindo esta linha:com:
Observe que este mod será substituído ao atualizar o sdkmanager.
Confira o post dele e o link para obter mais detalhes.
Essa solução também foi uma das soluções mencionadas neste tópico de problemas do github .
A publicação de German indica a origem do conflito e apresenta uma correção que não será substituída por atualizações.
Ele sugere renomear
/Library/Java/JavaVirtualMachines/Info.plist
como um meio de ocultá-lo do script que procura a versão mais alta do Java que reside no seu sistema. Dessa maneira, o JDK 8 é retornado como padrão.Referindo-se ao JDK 10 explicitamente, ou configurando-o como
$JAVA_HOME
, você pode usar o JDK 10, em vez do padrão, sempre que necessário.Os detalhes estão em seu post.
fonte
Could not find or load main class java.se.ee
- revertendo os DEFAULT_JVM_OPTS fixo esta ea questão anterior foi embora ..Você precisa adicionar o seguinte ao seu perfil (funciona no MacOS):
Não há necessidade de consertar nada.
fonte
Simplesmente instale o JDK versão 8 e selecione-o como padrão usando:
fonte
Atualização 2019-10:
Conforme declarado no rastreador de problemas , o Google está trabalhando em uma nova versão das Ferramentas de Linha de Comando do SDK do Android que é executada nas JVMs atuais (9, 10, 11+) e não depende dos módulos JAXB EE obsoletos!
Você pode baixar e usar as novas ferramentas de linha de comando do SDK do Android no Android Studio ou baixá-las manualmente nos servidores do Google:
Para as versões mais recentes, verifique os URLs dentro do repository.xml .
Se você descompactar manualmente as ferramentas da linha de comando, coloque-as em uma subpasta dentro de
$ANDROID_HOME
(por exemplo$ANDROID_HOME/cmdline-tools/...
).fonte
Estranhamente Java9 não é compatível com android-sdk
Combine todos os comandos em um para fácil referência:
fonte
Como o Java 11 removeu o JavaEE, você precisará fazer o download de alguns jars e adicionar ao caminho de classe:
JAXB: https://javaee.github.io/jaxb-v2/
JAF: https://www.oracle.com/technetwork/articles/java/index-135046.html
Em seguida, edite sdkmanager.bat para que o conjunto CLASSPATH = ... termine com ;% CLASSPATH%
Configure CLASSPATH para incluir JAXB e JAF:
Então sdkmanager.bat funcionará.
fonte
Corri para o mesmo problema ao executar:
Eu resolvi isso como
Mude o Java para usar 1.8
Então o mesmo comando corre bem
fonte
Eu enfrentei o mesmo problema. Embora eu seja um desenvolvedor antiquado (ainda usando o Windows para desenvolver: P)
Para resolver esse problema no Windows :
ETAPA 1: Instale o jdk 8 se não estiver instalado (o jdk 9 ou 11 não funciona, mas você pode instalá-los para uso em outros usos do desenvolvedor).
Muito simples usando Chocolatey:
(Se instalado usando Chocolatey, pule as etapas 2 e 3)
PASSO 2: Vá para as configurações de variáveis de ambiente e defina o diretório de instalação do JAVA_HOME TO jdk 8.
PASSO 3: Vá para a variável path e adicione o diretório bin do jdk 8 e mova-o para o topo.
PASSO 4: Feche todas as sessões de terminal abertas e reinicie uma nova sessão
ETAPA OPCIONAL 5: Dependendo do seu objetivo na execução do terminal (pode ser necessário adicionar o sdkmanager ao caminho ou simplesmente navegar para o diretório):
Isso é tudo! : O Desfrute de esvoaçantes! : D
fonte
Para máquinas Windows, desinstale o JDK se for maior que 1.8.172. Instale o JDK 1.8.172
Eu estava enfrentando o mesmo problema no Windows 10 com o java 10. Desinstalei o java 10 e instalei o java8 agora está funcionando bem para mim :)
fonte
Para usuários do Linux (estou usando uma distribuição Debian, Kali), veja como resolvi o meu.
Se você ainda não possui o jdk-8, deseja obtê-lo no site da oracle
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Eu obtive o jdk-8u191-linux-x64.tar.gz
Etapa 1 - Instalando o Java Move e descompacte-o em um local adequado como este
Você deve obter uma pasta descompactada como jdk1.8.0_191. Você pode excluir o tarball posteriormente para economizar espaço
Etapa 2 - Configurando alternativas para o local padrão do java
Etapa 3 - Selecionando suas alternativas como padrão
Etapa 4 - Confirmando a versão java padrão
Notas
fonte
Execute
java -version
ejavac -version
comandos em uma linha de comandos para garantir que eles sejam do mesmo JDK (por exemplo: versão 1.8.0_181)Caso contrário, é necessário modificar a
PATH
variável para que ela aponte apenas para um único JDK. Se você não tiver certeza de como fazê-lo, desinstale todas as outras instâncias Java, com exceção do Java 8 (Adicionar / Remover Programas no Windows). Hoje, o Unity e o Android recomendam o uso do JDK 8.Com o Java 8, não é necessário exportar o
java.se.ee
módulo, como mostrado em algumas das outras respostas. Você também pode remover qualquerJAVA_OPTS
ou outras variáveis de ambiente que você definiu.fonte
Eu havia resolvido esse problema recentemente desinstalando a versão superior do JDK e instalando o JDK 8. Depois de instalar o JDK, você precisa fornecer o caminho. Em seguida, é necessário abrir o prompt de comando em "C: \ Users \ Milan Adhikari \ AppData \ Local \ Android \ Sdk \ tools" e executar "sdkmanager --update", que atualizará o seu sdk e, em seguida, você precisará executar "flutter doctor - -android-licenças "no cmd e aceite todas as licenças.
Agora seu problema deve ser resolvido.
fonte
No meu caso, preciso do JDK 8 (tentando usar o gerenciador AVD e SDK no Qt no ubuntu) e 11 para ferramentas diferentes. Remover a versão 11 não é uma opção.
As soluções 'JAVA_OPTS' não fizeram nada. Eu realmente não gosto da exportação JAVA_HOME, pois ela pode forçar o lançamento de qualquer ferramenta que chame esses utilitários do mesmo shell (como o Qt), ou forçar você a tornar isso permanente, o que não é conveniente.
Então, para mim, a solução é bastante simples. Adicione algo parecido com isto na segunda linha de ~ / Android / tools / bin / sdkmanager e ~ / Android / tools / bin / avdmanager:
JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"
(ou qualquer que seja o caminho para o seu rev 8 jdk).
Com isso, essas ferramentas de linha de comando funcionam em modo autônomo, e também quando chamadas por outras ferramentas, como Qt, e o jdk 11 ainda é o padrão do sistema para outras. Não há necessidade de misturar bibliotecas etc ...
A única desvantagem é que qualquer atualização dessas ferramentas de linha de comando apagará essas modificações, que você precisará colocar novamente.
fonte
Faça o downgrade da sua versão java. Qualquer que seja o sistema ou ide.
Verifique se a versão java não é superior a 8
No meu caso, eu altero o ide java verion.Isso resolve meu problema.
fonte
Quando o seu Android stuio / jre usa uma versão diferente do java, você receberá esse erro. Para resolvê-lo, basta definir o Android studio / jre como seu JAVA_HOME. e desinstale seu próprio java.
fonte
Para mim, instalei a versão java 8 e apenas selecione a versão java em "Localização do JDK":
fonte
Para minha circunstância, estou usando o sdkman para gerenciar várias versões java. Defino a versão java padrão como 13. Instale a versão 8 e agora está funcionando bem.
fonte
A melhor maneira é usar o comando abaixo
Agora execute a versão adb para verificar se foi atualizada.
fonte