如何修复java.lang.UnsupportedClassVersionError:不支持的major.minor版本

时间:2012-04-30 11:28:25

标签: java jvm incompatibility unsupported-class-version

我正在尝试使用Notepad++作为我的一体化工具编辑,运行,编译等。

我安装了JRE,并且已将路径变量设置为.../bin目录。

当我在Notepad ++中运行“Hello world”时,收到此消息:

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

我认为这里的问题与版本有关;某些版本的Java可能是旧的或太新的。

  1. 我该如何解决?
  2. 我应该安装JDK,并将我的路径变量设置为JDK而不是JRE吗?
  3. JRE或JDK中的PATH变量有什么区别?

51 个答案:

答案 0 :(得分:1868)

显示的版本号描述了类文件兼容的JRE的版本。

报告的主要数字是:

Java SE 13 = 57,
Java SE 12 = 56,
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

(资料来源:Wikipedia

要解决实际问题,您应该尝试使用较新版本的Java JRE运行Java代码,或者指定Java编译器的目标参数,以指示编译器创建与早期Java版本兼容的代码。

例如,要生成与Java 1.4兼容的类文件,请使用以下命令行:

javac -target 1.4 HelloWorld.java

对于较新版本的Java编译器,您可能会收到有关未设置引导类路径的警告。有关此错误的详细信息,请参阅博客文章 New javac warning for setting an older source without bootclasspath

答案 1 :(得分:352)

发生

java.lang.UnsupportedClassVersionError是因为编译期间JDK较高,运行时期间JDK较低。

答案 2 :(得分:114)

在Eclipse中,我只是去了菜单命令 Window - > 偏好设置 - > Java - > 编译器,然后将“编译器合规性级别”设置为1.6。

答案 3 :(得分:58)

别担心,我解决了。

实际上很简单 - 您需要安装具有相同版本的BOTH JRE / JDK。

JRE 6 - > JDK 6

JRE 7 - > JDK 7

等等。

答案 4 :(得分:42)

此错误意味着您正在尝试加载使用比您安装的Java更新版本编译的Java“类”文件。

例如,您的.class文件可能是为JDK 7编译的,而您正尝试使用JDK 6运行它。

所以解决方案是:

  • 升级Java运行时或
  • 如果您有源,请使用本地Java编译器(如果有的话)重新编译该类。

    javac FileName.java

对于开发人员来说,如果另一个开发人员检入.class文件,并且他们有一个比你更新的java版本,就会发生这种情况!

答案 5 :(得分:22)

您正在尝试使用不支持编译代码版本的Java版本来运行程序。 所以基本上你必须使用更高版本编译代码并尝试使用较低版本运行它。

当你到了

Unsupported major.minor version 51.0

和版本 51.0 对应于 J2SE 7 您最有可能在Java 7中编译代码并尝试使用较低版本运行它。检查java -version显示的内容。它应该是Java 7版本。如果没有在PATH / JAVA_HOME中进行适当的更改。或者您可以使用与尝试运行代码相同的版本进行编译。如果配置令人困惑,您始终可以提供绝对路径/home/user/jdk1.7.0_11/bin/javac/home/user/jdk1.7.0_11/bin/java

答案 6 :(得分:18)

我在Mac上有类似的情况,以下过程对我有用:

在终端中输入

vi ~/.profile

然后在文件中添加此行,并保存

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

其中版本是您计算机上的版本,例如1.7.0_25

退出编辑器,然后输入以下命令使其生效

source ~/.profile 

然后键入java -version以检查结果

java -version 

什么是.profile档?

  

.profile文件是一个隐藏文件。它是一个可选文件,告诉系统当用户的配置文件登录时要运行哪些命令。例如,如果我的用户名是bruno,并且/ Users / bruno /中有.profile文件,则其所有内容将在登录过程中执行。

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

答案 7 :(得分:16)

在Eclipse的菜单 Window - &gt; 偏好设置 - &gt; Java - &gt; 编译器还检查“配置项目特定设置”。

如果您在同一Java版本中出现错误:尝试手动删除项目的构建文件夹。然后重启Eclipse。

答案 8 :(得分:14)

最常见的问题是您的JAVA_HOME变量配置错误,如果您安装了多个,那么应该指向正确的Java Development Kit库。

要查找SDK Java文件夹的位置,请运行以下命令:

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

于Debian / Ubuntu

要检查您已安装的java(openjdk),请通过以下方式检查:

dpkg -l "openjdk*" | grep ^i

或:

update-java-alternatives -l

要更改它,请使用:

update-alternatives --config java

前缀sudo(如果需要)。

选择替代java版本。

或检查哪些可供安装:

apt-cache search ^openjdk

前缀sudo(如果需要)。

然后你可以安装,例如:

apt-get install openjdk-7-jre

前缀sudo(如果需要)。

Fedora,Oracle Linux,Red Hat

通过以下方式安装/升级相应的软件包:

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

java-1.7.0-openjdk包仅包含Java运行时环境。如果要开发Java程序,请安装java-1.7.0-openjdk-devel包。

BSD

FreeBSD Ports集合中有一个名为openjdk7的OpenJDK 7软件包,可能需要重新配置。

请参阅:OpenJDK wiki page

只需从Oracle site安装适当的Java SE Development Kit库或安装

即可

詹金斯

如果您在使用Jenkins时遇到此问题,请参阅:

但是,使用update-alternatives选择正确版本的Java(较新版本)应该有效。

答案 9 :(得分:14)

您可以在Java 7中编译一些JAR库,并且只有Java 6作为Java Runtime。一些新的库可能会发生这种情况。

答案 10 :(得分:12)

当我安装JDK 1.7时,问题就解决了。

答案 11 :(得分:12)

我在1.7中编写的项目遇到了同样的问题,并尝试在1.6中执行。

我在Eclipse中的解决方案:

  • 右键点击您的项目属性 - &gt; Java构建路径 - &gt;库

  • 选择您的JRE系统库,然后点击右侧的修改,然后选择目标JRE。

  • 现在转到左侧的 Java编译器,并将编译器合规级别更改为目标。

这对我有用。

答案 12 :(得分:12)

当我使用Ant脚本来构建我的应用程序时,我遇到了同样的问题。

我使用Eclipse进行应用程序开发,并在项目的构建属性中更改了编译器版本。但这对我不起作用。然后我发现我可以在Ant脚本中提供编译器版本。

我在编译Java文件的部分修改了Ant脚本。

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

这有助于我解决不受支持的主要小问题。

答案 13 :(得分:11)

正如其他几个人所解释的那样,Java程序运行在旧版Java上,而不是编译它的版本。它需要“交叉编译”以实现向后兼容。换句话说,源Java版本和目标Java版本之间存在不匹配。

更改Eclipse菜单中的选项无法回答原始海报,他说他/她没有使用Eclipse。在OpenJDK javac 1.7版本中,如果使用参数-source-target,则可以交叉编译为1.6,并提供目标版本的 rt.jar 文件(即,较旧的)在编译时。如果您实际安装了1.6 JRE,则可以指向其安装(例如,Ubuntu上的/usr/lib/jvm/java-6-openjdk-i386/jre/lib/rt.jar,/ usr / jdk / jdk1。在SunOS上显然是6.0_60 / jre / lib / rt.jar。抱歉,我不知道它在Windows系统中的位置)。像这样:

javac -source 1.6 -target 1.6 -bootclasspath /usr/lib/jvm/java-6-openjdk-i386/jre/lib/rt.jar HelloWorld.java

看起来你可以从互联网上下载rt.jar,然后指向它。这不是太优雅了:

javac -source 1.6 -target 1.6 -bootclasspath ./rt.jar HelloWorld.java

答案 14 :(得分:10)

如果您在使用Maven时遇到此问题,可以使用插件Maven Compiler编译代码。

 <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
       .....

更新:如果您使用的是JDK 8,请将sourcetarget设置为1.8

答案 15 :(得分:10)

基于此...

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

在Eclipse中,右键单击package explorer中的项目:

构建路径 - &gt; 配置构建路径

下:

Java构建路径 - &gt; 图书馆 - &gt; 添加资料库 - &gt; JRE系统库 - &gt; 已安装的JRE - &gt; 搜索

通过在搜索完成后选择列表中的库来添加所需的JRE。

答案 16 :(得分:10)

  • 如果您使用Maven,请设置Java编译级别。打开命令行并为编译级别编写java -version

    Enter image description here

  • 如果您使用IntelliJ IDEA,请选择项目→文件设置构建执行部署编译器 Java编译器。然后将字节代码更改为1.7,如下图所示:

    Enter image description here

答案 17 :(得分:8)

从Eclipse运行Ant时我有相同的错误消息,但此处提到的其他解决方案并没有解决我的问题。有趣的是,从Windows命令行运行Ant运行正常,因此它必须是Eclipse中的配置问题。

事实证明,在Eclipse下,您可以指定Ant应该运行的环境,并将其设置为JRE而不是JDK。

  • 转到:运行 - &gt;外部工具 - &gt;外部工具配置......
  • 选择项目的Ant build.xml(如果您有多个项目)
  • 激活标签'JRE'
  • 这里选择了'Separate JRE:jre6'。当我从1.6或1.7系列中将其更改为JDK时,错误消失了。

答案 18 :(得分:8)

  

我该如何解决?

此错误表示用于执行类代码的JRE无法识别所使用的Java版本。通常是因为生成类文件的Java版本(即编译它)更新。

要解决此问题,您可以

a)使用与运行Java编译器相同或较旧版本的Java编译器编译Java源代码。即安装适当的JDK。

b)使用较新版本的Java编译器编译Java源代码,但是在兼容模式下。即使用-target参数。

c)在JRE中运行已编译的类,该JRE与用于编译类的JDK版本相同或更新。

您可以查看当前使用的版本 编译器为javac -version,运行时为java -version

  

我应该安装JDK,并将我的PATH变量设置为JDK   而不是JRE?

对于编译,当然要安装和配置您想要的特定JDK。

对于运行时,您可以使用JDK附带的一个或独立的JRE,但无论如何,请确保您已安装了正确的版本,并且已经配置了PATH,这样就不会有任何意外。

  

JRE或JDK中的PATH变量有什么区别?

PATH环境变量告诉命令shell在哪里查找您键入的命令。键入java时,命令shell解释程序将从左到右查看PATH变量中指定的所有位置,以查找要运行的相应java运行时可执行文件。如果你安装了多个版本的Java - 即你在PATH变量中指定的多个位置有java可执行文件,那么从左到右遇到的第一个将是执行的那个。

编译器命令是javac,只有JDK附带。运行时命令是java,随JDK一起提供,位于JRE中。

您可能安装了javac的一个版本(51.0 = Java 7),并且还安装了相同版本的java,但另一个版本的java在PATH的早期出现,因此被调用而不是你期望的那个。

答案 19 :(得分:7)

您使用了更高版本的JDK来编译并尝试从较低版本的JDK / JRE运行。

要检查此信息,请参阅版本信息:

javac -version

java -version

它们会有所不同,javac的版本号会更高。

要解决这个问题,请使用JDK版本中的java运行,或者如果您有更新的JRE / JDK也可以运行。

which javac会告诉您位置,例如/usr/bin/javac。只需使用/usr/bin/java <program>直接运行。

或者您可以将环境变量设置为永久解决方案。

答案 20 :(得分:6)

今天,我们Tomcat 7 Ubuntu 12.04.2 LTS(精确穿山甲)上出现了此错误消息:

  

/var/log/tomcat7/localhost.2014-04-08.log:
  2014年4月8日9:00:55 org.apache.catalina.core.StandardContext filterStart
  严重:异常启动过滤器struts2
  java.lang.UnsupportedClassVersionError:controller / ReqAccept:不支持的major.minor版本51.0(无法加载类controller.ReqAccept)

使用Java 7编译Struts应用程序。

事实证明,有人使用&#34;服务tomcat [停止/开始]&#34;重启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
  java版本&#34; 1.6.0_27&#34;

导致&#34;不支持的major.minor版本51.0&#34;错误。

当我们使用&#34; /etc/init.d/tomcat7 [停止/开始]&#34;重启Tomcat 7,问题解决了。

  

$ 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
  java版本&#34; 1.7.0_15&#34;

答案 21 :(得分:6)

当我恢复到Java 6并尝试运行以前使用Java 7编译的类时出现此问题。对我有用的是Preferences&gt; java&gt;编译器 - &gt;将合规性级别设置为1.6并且至关重要地“配置项目设置”..

答案 22 :(得分:6)

您的Java文件使用与您尝试运行它的版本(较低的运行时版本)不同的版本(更高的编译器版本)进行编译。

基本的理解是,使用较低版本编译的类应该在更高版本中运行。但相反(使用更高的编译器版本编译并尝试以较低的运行时版本运行它)有时是不可能的。

因此,在尝试执行程序时会显示此错误。 不支持的major.minor版本x.x

  

问:我在Java 7中创建了一个应用程序,但是当我的用户尝试时   运行它们会得到一个不受支持的major.minor版本51.0错误。什么   这是什么意思,我能做些什么呢?

     

答:如果在Java 7中使用javac编译应用程序,则生成的类文件将具有51.0版本号。版本   7之前的Java无法识别此数字,因此您的用户将拥有   在运行应用程序之前升级到Java 7。如果你不是   使用任何Java 7 API,您可以尝试使用编译应用程序   javac -target 1.6创建一个1.6兼容的类文件。如果你的   使用webstart部署应用程序,您可以指定最小值   版本要求。有关更多信息,请参阅Java Web Start上的文档   和JNLP在这里。一旦我们触发自动更新,此问题就会消失   Java 7适用于当前在桌面上使用Java 6的最终用户。该   时间表尚未确定,我们希望给开发人员   是时候解决他们的代码和JDK 7之间的任何问题了。

(资料来源:oracle.com。)

答案 23 :(得分:6)

我解决了。我跑了:

JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386

该错误具有误导性,Unsupported major.minor version 51.0。这给人的印象是不支持版本51(Java 7)。我们应该使用Java 6。

错误应该是:

  

不支持当前的Java版本50。请改用Java版本7(51:0和更高版本)。

答案 24 :(得分:5)

哦Mac OS X我能够通过设置JAVA_HOME变量来解决这个问题:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home

答案 25 :(得分:4)

首先让我们了解一些基本知识......

JRE是NetBeans / Eclipse / standalone中的一个组件,它将为您提供库,JVM,Java插件和组件。 Java Web开始。请注意,它不提供编译器或调试器。

JDK是JRE以及编译器和调试器的超集。

因此,当您将默认库作为JRE而不是JDK时,您将很快导入内容,但它不会编译。

相反,设置您的JDK路径(我使用NetBeans,并使用netbeans / etc / netbeans.conf中的netbeans.conf设置它们并更改路径)。

答案 26 :(得分:3)

就我而言,问题出在服务器运行时配置中:

Server Runtime Environment

检查JRE是否是您需要的版本:

enter image description here

该项目的版本为1.7,服务器JRE设置为1.6,在更改为正确的java版本后,它已正常启动。

答案 27 :(得分:3)

答案是针对这个问题的:

线程“主”中的异常java.lang.UnsupportedClassVersionError:edu / stevens / cs549 / dhts / main / LocalContext:不支持的major.minor版本52.0

我遇到了同样的问题。对于那些在AWS ec2实例中遇到此问题并以某种方式重定向到此问题的人。我正在回答这些问题,并想分享一下我是如何做到的。 我遇到麻烦是因为Amazon EC2实例正在运行Java版本1.7,也许我的项目与它不兼容,因为我正在使用Maven,并且它已经为Java 1.8进行了预配置。 所以我安装了新版本的java:

sudo yum -y install java-1.8.0

然后重要的步骤是删除旧版本:

sudo yum remove java-1.7.0-openjdk

在安装新版本后,请记住将其删除,否则它将继续使用相同的旧版本,并且希望它能够解决您的问题,

答案 28 :(得分:3)

  • 安装JDK 7.0.55并为JDK 7.0.55设置Eclipse的Java。
  • 通过在构建路径JDK 7.0.55上配置来使用JDK 7.0.55构建项目。
  • 通过菜单 Windows - &gt;在Eclipse中为JDK 7.0.55设置编译器偏好设置 - &gt; Java - &gt; 编译器 - 选择1.7。

答案 29 :(得分:3)

您已使用JDK 7编译Java类,并且您正尝试在JDK 6上运行相同的类。

答案 30 :(得分:3)

我遇到了一个问题,即我必须从命令行对我的项目运行Maven编译才能运行我的单元测试;如果我对测试类进行了更改并让Eclipse自动重新编译它,那么我得到了“不支持的major.minor版本51.0”错误。

我确实安装了JDK6和JDK7,但我的所有JRE设置都指向1.6,它们都位于pom和Eclipse中的项目属性页面中。没有任何Maven更新项目和/或刷新解决了这个问题。

最后我尝试关闭项目并重新打开它,这似乎解决了它! HTH

答案 31 :(得分:2)

由于Java 9 -target--release取代。

直到java 11,--release的可用数字为6 78910,{{1} }。
而且您可以猜测将来的版本将是1112,然后继续。

要使用较旧的目标jvm进行编译,请使用13 //将生成可在jvm> = 7上运行的.class文件。

然后您可以通过以下方式检查目标版本:

javac --release 7 Tmp.java

在输出中,javap -v Tmp | grep version标识目标jvm版本。

  • 55-> Java 11
  • 54-> Java 10
  • 53-> Java 9
  • 52-> Java 8
  • 51-> Java 7
  • 50-> Java 6

未来版本将删除更多旧版本:

  • 从Java 11开始,不支持主要版本<= 49 (java版本<= 5)
  • 从Java 12和13开始,不支持主要版本<= 50 (java版本<= 6)

您可以通过以下命令找出当前javac支持哪些目标版本:
  major version

答案 32 :(得分:1)

在安装了Homebrew的Mac OS X上修复此问题的另一种方法是:

 select cust_id,
        Row_number() over(partition by cust_id order by date) change_number,
        Date,
        information 
   from tablename;

答案 33 :(得分:1)

我遇到了同样的问题,我在 Linux 中修复了它。

检查$JAVA_HOME

需要JDK 1.8来编译/构建APK

安装Java JDK 1.8并更改JAVA_HOME

修改~/.bashrc并将您的JDK 1.8路径添加为JAVA_HOME

export JAVA_HOME=/usr/lib/jvm/java-8-oracle/jre/

source ~/.bashrc

关闭当前终端窗口/选项卡并运行$JAVA_HOME以检查路径。

答案 34 :(得分:0)

许多答案都指向IDE(例如Eclipse)。但是,这个问题与使用Notepad ++进行本机开发有关。

命名错误的根本原因是所使用的Java Runtime Environment和所使用的类以及库分别不匹配。以下描述的目的是无需任何其他安装即可进行编译。

1) 检查PATH变量中的定义。如果已定义:

C:\Program Files (x86)\Common Files\Oracle\Java\javapath

和/或

C:\ProgramData\Oracle\Java\javapath

这些路径链接到具有固定Java版本的java / javac。您可以使用javac -version在此文件夹中检查此版本。结果可以是:

java version "1.8.0_231"

这意味着正在使用Java版本8。 将此条目替换为%JAVA_HOME%\bin。 如果JDK是手动安装的,请检查环境中是否设置了JAVA_HOME。如果没有,请在此处添加与:

JAVA_HOME="C:\Program Files\Java\jdk1.7.0_80"

2) 我已经用gradle在命令行上构建了项目。在build.gradle中进行了定义:

android {
    buildToolsVersion "24.0.1"
    dependencies {
        compile 'com.android.support:design:23.0.1'
        compile 'com.android.support:support-v4:23.0.1'
        ...
    }
    ...
}

使用过的build-tools dx文件比其他组件要新。因此,需要进行修改:

buildToolsVersion "23.0.1"

答案 35 :(得分:0)

切换到JDK 6编译依赖性模块,然后又切换到JDK 8后,我遇到了同样的问题。
重新运行probject,编译器抱怨不支持major.minor版本。我验证了JVM和Maven的Java版本均为1,8。
经过多次尝试和谷歌搜索后,问题仍未解决,因此,如果我重新启动计算机(Windows 8),该怎么办?
我确实重新启动,再次重新运行该项目,问题已解决:)

答案 36 :(得分:0)

就我而言,问题是由于$ JAVA_HOME和$ PATH中Java版本不同而引起的。

echo $JAVA_HOME
/usr/lib/jvm/java-7-openjdk-amd64/jre
echo $PATH
/opt/jdk/jdk1.8.0_151/bin:/usr/lib/jvm/java-7-openjdk-amd64/jre/bin:/usr/local/bin:/usr/bin:/bin

一旦我将它们更新为与Java相同的版本,问题就消失了。

export JAVA_HOME=/opt/jdk/jdk1.8.0_151
export PATH=$JAVA_HOME/bin:$PATH

答案 37 :(得分:0)

如您所知,为jdk(Java开发工具包)bin目录设置环境变量Java_home始终是一个好习惯。

在上面的问题中看来,这似乎是JRE运行时环境正在寻找与JDk的Superset库不兼容的类。我建议直接从Oracle下载源获得完整的JDK和JRE或Jboss软件包(如果需要),以避免任何此类问题。

答案 38 :(得分:0)

确保您检查了Java的环境变量版本,这可能只是导致问题的JAVA_HOME(JDK路径)和JRE_HOME(JRE路径)之间的差异

答案 39 :(得分:0)

你可以指定&#34; target&#34;对于build.xml文件中的编译器,如果您使用的是ant,如下所示:

 <target name="compile" depends="init">
    <javac executable="${JAVA_HOME}\bin\javac" srcdir="${src.dir}" target="1.6" destdir="${classes.dir}" debug="true"
        deprecation="true" classpathref="compile.classpath" encoding="utf8">
        <include name="**/*.java" />
    </javac>
</target>

答案 40 :(得分:0)

如果有人在使用Gradle,请将其放入build.gradle

java { sourceCompatibility = JavaVersion.VERSION_1_7 targetCompatibility = JavaVersion.VERSION_1_7 }

在上述情况下,我们告诉编译器使字节码与Java 7版本(我要在其中运行该类的Java版本)兼容。

答案 41 :(得分:0)

我尝试了一切。重新安装Tomcat是最终工作的。这是我在重新安装之前检查过的内容。

确保您的环境变量如下所示。

$ echo $JAVA_HOME
C:\Program Files\Java\jdk1.7.0_51\
$ echo $JRE_HOME
C:\Program Files\Java\jdk1.7.0_51\jre\bin

确保Eclipse使用与设置JAVA_HOME相同的jre(如果未设置JAVA_HOME,它将查看JRE_HOME)。 Window > Prefrences > Java > Installed JREs(已选中的一个是默认值)

如果您对任何tomcat文件进行了任何更改,尤其是catalina.bat或startup.bat,那么您可能会告诉tomcat查看不同版本的java而不是您设置为JAVA_HOME C:\Program Files (x86)\Apache\apache-tomcat-7.0.26\bin < / p>

答案 42 :(得分:0)

对我来说,我在com/sun/javadoc/Doclet课上遇到了这个错误。经过一番挖掘,我发现我不小心将{8}从Java 8复制到我的Java 7文件夹中。

查找Java 7的tools.jar并将其放回文件夹修复了我的问题。所以要尝试一下。

答案 43 :(得分:0)

  1. 单击项目中的“属性”。
  2. 转到Java Build Path。
  3. 点击添加图书馆。
  4. 在JRE系统库上单击“下一步”。如果未默认选择,请选择所需的那个。
  5. 单击“完成”。
  6. 你已经完成了!

答案 44 :(得分:0)

我正在使用OS X v10.11.5(El Capitan),我尝试通过Maven设置JAVA_HOME并强制使用“正确”的Java版本。什么都没有帮助。

在应用程序仍在运行时注销OS X帐户时发生问题。再次登录后,OS X打开旧的终端会话,显示灰色历史记录。我使用相同的终端会话来构建项目,但是由于不支持的类版本错误而失败。

清理Maven项目根本没有帮助。

要解决这个问题,我只需关闭自动打开的终端窗口并使用新的终端窗口。

答案 45 :(得分:0)

如果您的构建路径中添加了第二个项目,请确保它与您的第一个项目具有相同的编译器版本: 属性 - &gt; Java编译器 - &gt;编译器合规性级别

答案 46 :(得分:0)

我通过检查部署程序集中是否部署了Maven依赖项来解决此问题。在我的情况下,他们不是。

添加它解决了问题。

答案 47 :(得分:0)

将其添加到您的pom.xml文件中:

<project ....>
    <properties>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
    </properties>
</project>

1.7是您打算使用的Java版本。这会覆盖Maven编译器设置,因此从这里进行调试很有用。

答案 48 :(得分:0)

我为Grails项目的Spring Source Tool(STS)IDE遇到了同样的问题。我检查了已安装的Java版本,项目Java版本是1.7。*。后来我发现在 GGTS.ini 文件中,Java版本设置为1.6:

<强>解决方案:

-Dosgi.requiredJavaVersion = 1.6更改为
-Dosgi.requiredJavaVersion = 1.7
在-vmargs
之前添加以下两行 -vm
jdk1.7.0_21 / JRE / LIB / AMD64 /服务器/ libjvm.so

问题解决了。快乐的编码。

答案 49 :(得分:0)

我有相同的情况,但上述任何提示都没有帮助:)在我们的环境中,我们将tomcat作为服务在Windows上运行。我们安装了Java 1.7并在此版本上设置了JAVA_HOME。当然,源代码是基于Java 1.7构建的。尽管如此,tomcat表示它使用的是以前版本的JVM。经过深入分析后,Windows上安装的Tomcat服务仍然保持JAVA_HOME的旧值指向Java 1.6。安装新的Tomcat服务后,一切都已解决。 所以结论是:当你改变java版本和tomcat作为服务运行时,你必须重新安装tomcat服务。

答案 50 :(得分:0)

我遇到了同样的问题,我在Mac上通过this solution解决了这个问题。我希望它对某人有帮助。这是因为系统不知道JDK的新版本,它仍然指向旧的JDK。