使用java7运行时tomcat7 UnsupportedClassVersionError

时间:2012-10-14 20:36:47

标签: tomcat7 grails-2.0

问题:当我将战争部署到tomcat7时,我收到错误 java.lang.UnsupportedClassVersionError:org.MyLibraryClass:不支持的major.minor版本51.0

(这是使用比运行代码时使用的java更新的版本编译java时出现的错误。)

情况,按顺序:

  1. 全新的ubuntu 12.04.1服务器64位最小,在虚拟机中
  2. 安装了tomcat6
  3. 试图部署我的战争
  4. 意识到错误,我需要java7,因为ubuntu 12仍然带有过时的java
  5. 使用本指南https://askubuntu.com/questions/197248/java-on-ubuntu-server-12-04

    安装了oracle java 7
      sudo add-apt-repository ppa:webupd8team/java
      sudo apt-get update
      sudo apt-get install oracle-java7-installer
    
  6. 删除了tomcat6并安装了tomcat7

      sudo apt-get remove tomcat6-common
      sudo apt-get install tomcat7
    
  7. 将我的战争部署到tomcat7

  8. 启动了tomcat

      sudo service tomcat7 start
    
  9. 检查了我应用的日志文件。同样的错误。

  10. echo $ JAVA_HOME为空,java -version显示:

      java version "1.7.0_07"
      Java(TM) SE Runtime Environment (build 1.7.0_07-b10)
      Java HotSpot(TM) 64-Bit Server VM (build 23.3-b01, mixed mode)
    
  11. 它是默认的tomcat7安装,无需修改。我仍然检查启动脚本和配置,以确保没有在任何地方指定自定义Java版本。还通过询问catalina来检查:

  12.   ubuntu@ubuntu:/home$ /usr/share/tomcat7/bin/catalina.sh version
      Using CATALINA_BASE:   /usr/share/tomcat7
      Using CATALINA_HOME:   /usr/share/tomcat7
      Using CATALINA_TMPDIR: /usr/share/tomcat7/temp
      Using JRE_HOME:        /usr
      Using CLASSPATH:       /usr/share/tomcat7/bin/bootstrap.jar:/usr/share/tomcat7/bin/tomcat-juli.jar
      Server version: Apache Tomcat/7.0.26
      Server built:   Jul 19 2012 03:21:30
      Server number:  7.0.26.0
      OS Name:        Linux
      OS Version:     3.2.0-29-generic
      Architecture:   amd64
      JVM Version:    1.7.0_07-b10
      JVM Vendor:     Oracle Corporation
    

    现在我被困住了。我不知道任何java代码如何无法在oracle的jre7上运行。

    我的战争是一个全新的非常基本的hello world grails 2.1 app with maven,它有一个用jdk7编译的maven依赖(org.MyLibraryClass)。那是我得到错误的那个。

    在Grails中,我将BuildConfig.groovy更改为1.7而不是1.6:

      grails.project.target.level = 1.7
      grails.project.source.level = 1.7
    
    然后做了一个grails清理,重建,战争,重新部署。没有变化。

    任何想法接下来要尝试什么?

3 个答案:

答案 0 :(得分:1)

使用Java 7编译代码并在Java 6下运行时的典型错误。

答案 1 :(得分:0)

我认为您的查询中的关键行是:

sudo service tomcat7 start

我认为它可能会触发OpenJDK的继承仍在系统中。你想要做的就是从你自己的环境中尝试tomcat。

以普通用户身份登录

java -version
/usr/share/tomcat7/bin/startup.sh

并检查。您还应该以干净的用户,root或其他方式登录,并检查java -version以进行检查。

如果所有其他方法都失败了,请转到/ etc / profile并确保路径到Oracle的Java / bin目录是环境的PATH变量中的第一个。

答案 2 :(得分:0)

我刚才遇到同样的问题,但现在已经解决了。

请检查此符号

  

/ usr / lib中/ JVM /默认-java的

它的默认链接是open-jdk,重置正确的jdk dirctory。

祝你好运!