Tomcat 7 lançando erro de versão de classe não suportada

Tomcat 7 lançando erro de versão de classe não suportada

Estou configurando um servidor Tomcat para hospedar sites JSP. Criei um aplicativo de teste no Eclipse para ter certeza de que tudo está funcionando. Tudo o que ele faz é imprimir texto em JSP e depois chamar uma função em uma classe personalizada que também imprime texto. Isso funciona bem no Eclipse (rodando no mesmo computador que o Tomcat), colocado quando compilo o programa em um arquivo WAR e tento executá-lo no Tomcat, ele lança a exceção:

message javax.servlet.ServletException: java.lang.UnsupportedClassVersionError: jsp/test/TestClass : Unsupported major.minor version 51.0 (unable to load class jsp.test.TestClass)

description The server encountered an internal error that prevented it from fulfilling this request.

org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.UnsupportedClassVersionError: jsp/test/TestClass : Unsupported major.minor version 51.0 (unable to load class jsp.test.TestClass)
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549)
    ...

root cause

javax.servlet.ServletException: java.lang.UnsupportedClassVersionError: jsp/test/TestClass : Unsupported major.minor version 51.0 (unable to load class jsp.test.TestClass)
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:912)
    ...

root cause

java.lang.UnsupportedClassVersionError: jsp/test/TestClass : Unsupported major.minor version 51.0 (unable to load class jsp.test.TestClass)
    org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2899)
    ...

Devo salientar que, depois de atualizar a página, o erro muda para just UnsupportedClassVersionErrore perde o material "major.minor". Não tenho certeza do que está acontecendo lá.

O Google me disse que isso tem a ver com o tempo de execução ser uma versão mais antiga que o compilador, no entanto, até onde eu sei, tanto o Eclipse quanto o Tomcat estão usando o mais recente. Eles estão no mesmo computador, então deveriam estar usando a mesma variável JAVA_HOME, certo? Eu tenho várias instalações JRE/JDK diferentes e tentei várias delas como JAVA_HOME, embora nada parecesse mudar (estou reiniciando o Tomcat todas as vezes). A partir de agora é:

JAVA_HOME = C:\Program Files\Java\jdk1.7.0_25
Path = C:\Program Files\Java\jdk1.7.0_25\bin; ...

Há mais alguma coisa que precisa ser configurada para o Tomcat usar esta versão do Java? Ou há um local diferente para o qual preciso apontar JAVA_HOME? Eu tentei várias instalações do JRE também, mas não consegui nada. Alguma idéia com isso?

Tudo isso está sendo feito no Windows Server 2008 R2 usando o Tomcat 7.

Desde já, obrigado.

Douglas

Responder1

No Eclipse, vá para as Preferências do Projeto, vá para as configurações do Java Compiler.

O que énível de conformidade do compilador?

Se você estiver executando isso com o Tomcat 7 com Java 7, o nível de conformidade deverá ser definido como1.7. Se não for, esse pode ser o seu problema. Embora deva ficar bem, desde que seja <=1.7, você por acaso não teria configurado o Eclipse para um instantâneo do Java 8?

De qualquer forma, conhecer esse valor pode ajudar a esclarecer a questão.

Responder2

UnsupportedClassVersionErrorsempre aparece quando você compila "com" uma versão (direcionando uma versão) e executa com uma versão Java anterior.

JAVA_HOMEnão informa ao sistema operacional onde ele deve procurar o arquivo java.exe. O sistema operacional pegará esse arquivo da variável PATH. Por isso é recomendado adicionar no início da PATHvariável o path JAVA_HOME/bin.

Se não for o caso, o stacktrace (o resto da mensagem de erro) pode ser útil. Em particular o "Major.minor não suportado" ou algo parecido, e os números.

Informações adicionais.

Responder3

Como você está implantando seu código no Tomcat, via Eclipse (WTP) ou está construindo um WAR com uma ferramenta de construção específica e implantando-o manualmente em um Tomcat local?

informação relacionada