java class version 52




Como corrigir java.lang.UnsupportedClassVersionError: Versão major.minor não suportada (20)

Eu estou tentando usar o Notepad++ como minha ferramenta tudo-em-um editar, executar, compilar, etc.

Eu tenho o JRE instalado e configurei minha variável de caminho para o diretório ... / bin.

Quando executo meu "Hello world" no Notepad ++, recebo esta mensagem:

java.lang.UnsupportedClassVersionError: test_hello_world :
 Unsupported major.minor version 51.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
       .........................................

Eu acho que o problema aqui é sobre versões; alguma versão do Java pode ser antiga ou muito nova.

  1. Como faço para corrigir isso?
  2. Devo instalar o JDK e configurar minha variável de caminho para o JDK em vez do JRE?
  3. Qual é a diferença entre a variável PATH no JRE ou no JDK?

Como faço para corrigir isso?

Este erro significa que o JRE que está sendo usado para executar seu código de classe não reconhece a versão do Java usada. Geralmente porque a versão do Java que gerou o seu arquivo de classe (isto é, compilado) é mais nova.

Para consertar isso, você pode

a) Compile suas fontes Java com a mesma versão, ou mais antiga, do compilador Java, como será usado para executá-lo. ou seja, instale o JDK apropriado.

b) Compile suas fontes Java com a versão mais nova do compilador Java, mas no modo de compatibilidade. isto é, use o parâmetro -target .

c) Execute suas classes compiladas em um JRE que seja a mesma versão ou mais nova que o JDK usado para compilar as classes.

Você pode verificar as versões que você está usando atualmente com javac -version para o compilador e java -version para o tempo de execução.

Devo instalar o JDK e configurar minha variável PATH para o JDK em vez do JRE?

Para compilação, certamente, instale e configure o JDK específico que você deseja.

Para o tempo de execução, você pode usar o que vem com o JDK ou um JRE autônomo, mas independentemente disso, verifique se instalou as versões corretas e se configurou o PATH para que não haja surpresas.

Qual é a diferença entre a variável PATH no JRE ou no JDK?

A variável de ambiente PATH diz ao shell de comando onde procurar o comando que você digita. Quando você digita java , o interpretador de shell de comando examinará todos os locais especificados na variável PATH , da esquerda para a direita, para localizar o executável de tempo de execução java apropriado a ser executado. Se você tiver várias versões do Java instaladas - ou seja, se você tiver o executável java em vários locais especificados na variável PATH, o primeiro que for encontrado ao ir da esquerda para a direita será aquele que for executado.

O comando do compilador é javac e só vem com o JDK. O comando de tempo de execução é java e vem com o JDK e está no JRE.

É provável que você tenha uma versão (51.0 = Java 7) do javac instalada e também tenha a mesma versão do java instalada, mas que outra versão anterior do java apareça anteriormente no PATH e esteja sendo invocada em vez do um que você espera.


Com base nisso...

J2SE 8 = 52
J2SE 7 = 51
J2SE 6.0 = 50
J2SE 5.0 = 49
JDK 1.4 = 48
JDK 1.3 = 47
JDK 1.2 = 46
JDK 1.1 = 45

No Eclipse, clique com o botão direito do mouse no projeto no gerenciador de pacotes:

Caminho de Construção -> Configurar Caminho de Construção

Debaixo:

Caminho de compilação Java -> Bibliotecas -> Adicionar biblioteca -> Biblioteca de sistemas JRE -> JREs instalados -> Pesquisar .

Adicione o JRE necessário selecionando a biblioteca na lista disponível após a conclusão da pesquisa.


Esse erro significa que você está tentando carregar um arquivo "classe" Java que foi compilado com uma versão mais recente do Java do que você instalou.

Por exemplo, seu arquivo .class poderia ter sido compilado para o JDK 7 e você está tentando executá-lo com o JDK 6.

Então a solução é:

  • Atualize seu tempo de execução Java ou
  • Recompile a classe se você tiver a fonte, usando seu compilador Java local (se tiver uma).

    javac Nome_do_Arquivo.java

Para os desenvolvedores, isso pode acontecer se outro desenvolvedor fizer check-in em um arquivo .class e eles tiverem uma versão mais recente do java do que você!


Eu enfrentei o mesmo problema quando estava trabalhando com um script Ant para construir meu aplicativo.

Eu uso o Eclipse para o desenvolvimento do meu aplicativo e alterei a versão do compilador nas propriedades de compilação do projeto. Mas isso não funcionou para mim. Então descobri que posso fornecer a versão do compilador no script Ant.

Eu modifiquei o script Ant na seção onde ele compila os arquivos Java.

<target name="build-java" depends="prepare-build">
    <echo message="Compiling java files"/>
    <javac ....
           target="1.5"...
    </javac>
</target>

Isso funcionou para mim para resolver o problema menor importante sem suporte.


Eu tenho o mesmo problema com um projeto escrito em 1.7 e tentei executar em 1.6.

Minha solução no Eclipse:

  • Clique com o botão direito em Propriedades do Projeto -> Caminho de Construção Java -> Bibliotecas

  • Selecione sua biblioteca do sistema JRE e clique em Editar à direita e escolha o JRE de destino.

  • Agora vá para o Java Compiler à esquerda e mude o nível de conformidade do compilador para o seu destino.

Isso funcionou para mim.


Eu tive a mesma mensagem de erro ao executar Ant do Eclipse, mas as outras soluções mencionadas aqui não resolveram meu problema. O engraçado é que rodar o Ant na linha de comando do Windows estava rodando bem, então tinha que ser um problema de configuração dentro do Eclipse.

Descobriu-se que sob o Eclipse você pode especificar o ambiente com o qual o Ant deve estar em execução e isso foi configurado como um JRE em vez de um JDK.

  • Vá para: Executar -> Ferramentas Externas -> Configurações de Ferramentas Externas ...
  • Selecione o Ant build.xml para seu projeto (se você tiver vários projetos)
  • Ativar a aba 'JRE'
  • Aqui foi selecionado 'JRE separado: jre6'. Quando mudei para um JDK da série 1.6 ou 1.7, o erro desapareceu.

Eu tive uma situação semelhante no Mac e o seguinte processo funcionou para mim:

No terminal, digite

vi ~/.profile

Em seguida, adicione esta linha no arquivo e salve

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk<version>.jdk/Contents/Home

onde a versão é aquela em seu computador, como 1.7.0_25 .

Saia do editor e digite o comando a seguir para torná-lo efetivo

source ~/.profile 

Em seguida, digite java -version para verificar o resultado

java -version 

O que é o arquivo .profile ?

O arquivo .profile é um arquivo oculto. É um arquivo opcional que informa ao sistema quais comandos devem ser executados quando o usuário cujo arquivo de perfil está logado. Por exemplo, se meu nome de usuário for bruno e houver um arquivo .profile em / Users / bruno /, todo o seu conteúdo será executado durante o procedimento de login.

Fonte: http://computers.tutsplus.com/tutorials/speed-up-your-terminal-workflow-with-command-aliases-and-profile--mac-30515


Hoje, esta mensagem de erro apareceu no nosso Tomcat 7 no Ubuntu 12.04.2 LTS (Precise Pangolin):

/var/log/tomcat7/localhost.2014-04-08.log:
8 de abr de 2014 9:00:55 AM org.apache.catalina.core.StandardContext filterStart
SEVERE: Exceção ao iniciar o filtro struts2
java.lang.UnsupportedClassVersionError: controller / ReqAccept: versão major.minor não suportada 51.0 (não é possível carregar a classe controller.ReqAccept)

O aplicativo Struts é compilado com o Java 7.

Acontece que alguém usa "serviço tomcat [stop / start]" para reiniciar o Tomcat 7,

$ ps -ef | grep java
tomcat7 31783 1 32 20:13? 00:00:03 / usr / lib / jvm / default-java / bin / java ...
$ / usr / lib / jvm / default-java / bin / java -version
versão java "1.6.0_27"

O que causa o erro "Unsupported major.minor version 51.0".

Quando usamos "/etc/init.d/tomcat7 [stop / start]" para reiniciar o Tomcat 7, o problema foi resolvido.

$ ps -ef | grep java
tomcat7 31886 1 80 20:24? 00:00:10 /usr/local/java/jdk1.7.0_15/bin/java
$ /usr/local/java/jdk1.7.0_15/bin/java -version
versão java "1.7.0_15"


No Eclipse, eu apenas fui ao comando de menu Window -> Preferences -> Java -> Compiler e, em seguida, configure "Compiler compliance level" para 1.6.


No menu do Eclipse, Janela -> Preferências -> Java -> Compilador, verifique também "Configurar Configurações Específicas do Projeto".

Se você ainda tiver o erro com a mesma versão do Java: tente excluir a pasta de criação do seu projeto manualmente. Em seguida, reinicie o Eclipse.


O número da versão mostrado descreve a versão do JRE com a qual o arquivo de classe é compatível.

Os principais números relatados são:

Java SE 11 = 55,
Java SE 10 = 54,
Java SE 9 = 53,
Java SE 8 = 52,
Java SE 7 = 51,
Java SE 6.0 = 50,
Java SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45

(Fonte: Wikipedia )

Para corrigir o problema real, você deve tentar executar o código Java com uma versão mais nova do Java JRE ou especificar o parâmetro target para o compilador Java para instruir o compilador a criar código compatível com versões anteriores do Java.

Por exemplo, para gerar arquivos de classe compatíveis com o Java 1.4, use a seguinte linha de comando:

javac -target 1.4 HelloWorld.java

Com as versões mais recentes do compilador Java, é provável que você receba um aviso sobre o caminho da classe de inicialização que não está sendo definido. Mais informações sobre esse erro estão disponíveis na postagem do blog. Novo aviso do javac para definir uma fonte mais antiga sem o bootclasspath .


O problema mais comum é a configuração incorreta de sua variável JAVA_HOME , que deve apontar para a biblioteca correta do Java Development Kit, se você tiver vários instalados.

Para encontrar onde a pasta Java do SDK está localizada, execute os seguintes comandos:

jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));'

Debian / Ubuntu

Para verificar qual java (openjdk) você instalou, verifique via:

dpkg -l "openjdk*" | grep ^i

ou:

update-java-alternatives -l

Para alterá-lo, use:

update-alternatives --config java

Prefixo com sudo se necessário.

para selecionar a versão alternativa do java.

Ou verifique quais estão disponíveis para instalação:

apt-cache search ^openjdk

Prefixo com sudo se necessário.

Então você pode instalar, por exemplo:

apt-get install openjdk-7-jre

Prefixo com sudo se necessário.

Fedora, Oracle Linux, Red Hat

Instalar / atualizar pacote apropriado via:

yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel

O pacote java-1.7.0-openjdk contém apenas o Java Runtime Environment. Se você deseja desenvolver programas Java, instale o pacote java-1.7.0-openjdk-devel .

BSD

Existe um pacote do OpenJDK 7 na coleção FreeBSD Ports chamado openjdk7 que provavelmente precisa ser reconfigurado.

Veja: página wiki do OpenJDK .

janelas

Basta instalar a biblioteca apropriada do Java SE Development Kit no site da Oracle ou instalar

Jenkins

Se você estiver enfrentando esse problema com o Jenkins, consulte:

No entanto, selecionar a versão correta do Java (mais recente) com update-alternatives deve funcionar.


Primeiro vamos pegar algumas noções certas ...

O JRE é um componente no NetBeans / Eclipse / standalone que fornece bibliotecas, JVM, plugins Java e Java web start. Observe que ele não fornece compliers ou depuradores.

O JDK é o superconjunto do JRE junto com compliers e depuradores.

Então, quando você tem sua biblioteca padrão como um JRE em vez de JDK, você vai ter um bom tempo importando coisas, mas não irá compilar.

Em vez disso, defina seu caminho para o JDK (eu uso o NetBeans, e eu os configuro usando netbeans.conf no netbeans /etc/netbeans.conf e mudo o caminho).


Quando instalei o JDK 1.7, o problema foi resolvido.


Seu arquivo Java é compilado com uma versão diferente (versão superior do compilador) que a versão (menor versão do tempo de execução) com a qual você está tentando executá-lo.

É um entendimento básico de que classes compiladas com versões inferiores devem ser executadas nas últimas versões superiores. Mas o oposto (compilado com uma versão mais alta do compilador e tentando executá-lo com uma versão de tempo de execução menor) não é, às vezes, possível.

Daí você é mostrado este erro, ao tentar executar o seu programa. Versão major.minor não suportada xx

P: Eu criei um aplicativo no Java 7, mas quando meus usuários tentam executá-lo, recebem um erro de versão 51.0 do major.minor não suportado. O que isso significa e o que posso fazer sobre isso?

R: Se você compilar um aplicativo usando javac no Java 7, os arquivos de classe resultantes terão o número da versão 51.0. Versões do Java anteriores a 7 não reconhecem esse número, portanto, os usuários precisarão atualizar para o Java 7 antes de executar o aplicativo. Se você não estiver usando APIs do Java 7, pode tentar compilar seu aplicativo usando o javac -target 1.6 para criar um arquivo de classe compatível com 1.6. Se seu aplicativo for implementado usando o webstart, você poderá especificar a versão mínima necessária. Para obter mais informações, consulte os documentos no Java Web Start e no JNLP aqui. Esse problema desaparecerá assim que acionarmos a atualização automática para o Java 7 para usuários finais que tenham o Java 6 em suas áreas de trabalho. A linha do tempo para isso ainda não foi determinada, queremos dar aos desenvolvedores tempo para resolver qualquer problema entre o código e o JDK 7 primeiro.

(Fonte: oracle.com .)


Tive esse problema quando reverti para o Java 6 e tentei executar classes previamente compiladas com o Java 7. O que funcionou para mim foi Preferências> java> compilador -> definir o nível de conformidade como 1.6 e, crucialmente, "configurar configurações do projeto".


Você está tentando executar seu programa com uma versão Java que não suporta a versão na qual o código foi compilado. Então, basicamente, você deve ter compilado seu código com uma versão superior e tentar executá-lo usando uma versão inferior.

Como você está ficando

Unsupported major.minor version 51.0

e a versão 51.0 corresponde ao J2SE 7 você provavelmente compilou seu código no Java 7 e tentou executá-lo usando uma versão inferior. Verifique o que o java -version exibe. Deve ser a versão do Java 7. Se não fizer alterações apropriadas no PATH / JAVA_HOME. Ou você pode compilar com a mesma versão que você está tentando executar o código. Se as configurações forem confusas, você sempre poderá fornecer o caminho absoluto /home/user/jdk1.7.0_11/bin/javac e /home/user/jdk1.7.0_11/bin/java .


Você pode ter alguma biblioteca JAR compilada no Java 7 e você tem apenas Java 6 como Java Runtime. Isso pode acontecer com algumas novas bibliotecas.


java.lang.UnsupportedClassVersionError ocorre devido a um JDK mais alto durante o tempo de compilação e menor ao JDK durante o tempo de execução.


  • Instale o JDK 7.0.55 e configure o Java para Eclipse para o JDK 7.0.55.
  • Construa o projeto com o JDK 7.0.55 configurando o caminho de construção JDK 7.0.55.
  • Configure o compilador no Eclipse para JDK 7.0.55 pelo menu Windows -> Preferências -> Java -> Compilador - escolha 1.7.






unsupported-class-version