1661

我正在尝试使用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. PATHJRE或JDK中的变量有什么区别?
4

50 回答 50

2035

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

报告的主要数字是:

Java SE 17 = 61,
Java SE 16 = 60, 
Java SE 15 = 59,
Java SE 14 = 58,
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

(来源:维基百科

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

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

javac -target 1.4 HelloWorld.java

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

于 2012-07-11T11:59:50.970 回答
388

java.lang.UnsupportedClassVersionError发生的原因是编译时 JDK 较高,而运行时 JDK 较低。

于 2012-06-28T06:48:56.227 回答
124

在 Eclipse 中,我只是转到菜单命令Window -> Preferences -> Java -> Compiler,然后将“Compiler compliance level”设置为 1.6。

于 2013-05-02T18:58:41.617 回答
63

别担心,我已经解决了。

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

JRE 6 -> JDK 6

JRE 7 -> JDK 7

等等。

于 2012-05-04T06:23:28.597 回答
45

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

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

所以解决方案是:

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

    javac 文件名.java

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

于 2013-02-20T19:02:45.067 回答
25

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

当你得到

Unsupported major.minor version 51.0

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

于 2013-10-01T08:51:44.300 回答
21

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

在终端中,键入

vi ~/.profile

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

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

其中 version 是您计算机上的版本,例如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

于 2014-02-11T06:55:26.433 回答
18

在 Eclipse 的菜单Window -> Preferences -> Java -> Compiler检查“配置项目特定设置”。

如果您仍然遇到相同 Java 版本的错误:尝试手动删除项目的构建文件夹。然后重新启动 Eclipse。

于 2013-08-06T10:24:19.643 回答
14

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

于 2013-06-25T12:51:24.033 回答
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、红帽

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

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 页面

视窗

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

詹金斯

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

但是,选择正确版本的 Java(较新)update-alternatives应该可以。

于 2015-04-04T12:16:11.253 回答
12

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

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

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

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

这对我来说解决了不受支持的主要小问题。

于 2013-10-14T03:32:11.013 回答
12

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

于 2014-01-07T06:43:36.677 回答
12

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

我在 Eclipse 中的解决方案:

  • 右键单击您的项目属性-> Java 构建路径-> 库

  • 选择您的 JRE System Library 并单击右侧的Edit ,然后选择目标 JRE。

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

这对我有用。

于 2014-09-01T08:02:28.310 回答
11

正如几个人在其他地方回答的那样,Java 程序运行在比它编译它的版本更旧的 Java 版本上。为了向后兼容,它需要“交叉编译”。换句话说,源 Java 版本和目标 Java 版本不匹配。

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

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

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

javac -source 1.6 -target 1.6 -bootclasspath ./rt.jar HelloWorld.java
于 2013-09-16T18:25:12.003 回答
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,请设置sourcetargetto 。1.8

于 2014-03-10T11:01:51.030 回答
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 中,右键单击包资源管理器中的项目:

构建路径->配置构建路径

在下面:

Java Build Path -> Libraries -> Add Library -> JRE System Library -> Installed JREs -> Search

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

于 2014-05-28T09:10:14.300 回答
10
  • 如果您使用 Maven,请设置您的 Java 编译级别。打开命令行并java -version为您的编译级别编写:

    在此处输入图像描述

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

    在此处输入图像描述

于 2015-11-03T08:03:53.377 回答
8

从 Eclipse 运行 Ant 时,我收到了同样的错误消息,但是这里提到的其他解决方案并没有解决我的问题。有趣的是,从 Windows 命令行运行 Ant 运行良好,因此它必须是 Eclipse 中的配置问题。

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

  • 转到:运行 -> 外部工具 -> 外部工具配置...
  • 为您的项目选择 Ant build.xml(如果您有多个项目)
  • 激活选项卡“JRE”
  • 这里选择了“单独的 JRE:jre6”。当我将它从 1.6 或 1.7 系列更改为 JDK 时,错误消失了。
于 2014-02-11T10:36:05.767 回答
8

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

要检查这一点,请参阅版本信息:

javac -version

java -version

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

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

which javac会告诉你位置,例如,/usr/bin/javac。直接使用/usr/bin/java <program>.

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

于 2014-09-24T01:27:35.497 回答
8

我如何解决它?

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

要修复它,您可以

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

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

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

您可以检查您当前使用 javac -version的编译器版本和java -version运行时版本。

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

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

对于运行时,您可以使用 JDK 附带的版本或独立的 JRE,但无论如何,请确保您已安装正确的版本并已配置 PATH,以免出现意外。

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

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

编译器命令是javac并且仅随 JDK 一起提供。运行时命令java随 JDK 一起提供,并且位于 JRE 中。

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

于 2015-03-26T09:42:12.540 回答
6

今天,我们的Tomcat 7 on Ubuntu 12.04.2 LTS(Precise Pangolin)出现了这个错误信息:

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

Struts应用程序是用 Java 7 编译的。

原来,有人使用“service tomcat [stop/start]”重启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 版本“1.6.0_27”

这会导致“Unsupported major.minor version 51.0”错误。

当我们使用“/etc/init.d/tomcat7 [stop/start]”重启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 版本“1.7.0_15”

于 2014-04-08T04:52:23.347 回答
6

当我恢复到 Java 6 并尝试运行以前用 Java 7 编译的类时遇到了这个问题。对我有用的是 Preferences > java > compiler --> 将合规级别设置为 1.6 并至关重要地“配置项目设置”..

于 2014-04-15T03:09:37.623 回答
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 及更高版本)。`

于 2014-08-22T03:53:52.040 回答
6

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

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

因此,当您尝试执行您的程序时,您会看到此错误。不支持的major.minor 版本xx

问:我在 Java 7 中创建了一个应用程序,但是当我的用户尝试运行它时,他们收到 Unsupported major.minor version 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 6 的最终用户触发自动更新到 Java 7,此问题就会消失。时间表尚未确定,我们希望让开发人员有时间首先解决他们的代码和 JDK 7 之间的任何问题。

(来源:oracle.com。)

于 2016-09-13T16:08:19.270 回答
5

哦,Mac OS XI 可以通过设置 JAVA_HOME 变量来解决这个问题:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home
于 2015-04-09T09:10:19.553 回答
4

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

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

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

因此,当您将默认库作为 JRE 而不是 JDK 时,您将很高兴导入一些东西,但它不会编译。

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

于 2014-03-19T17:49:01.473 回答
4

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

服务器运行时环境

检查 JRE 是您需要的版本:

在此处输入图像描述

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

于 2018-03-06T12:29:48.443 回答
3

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

我确实安装了 JDK6 和 JDK7,但是我的所有 JRE 设置都指向 1.6,无论是在 pom 中还是在 Eclipse 的项目属性页面中。没有多少 Maven 更新项目和/或刷新解决了这个问题。

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

于 2014-06-18T16:29:16.537 回答
3

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

于 2014-06-26T07:40:13.380 回答
3
  • 安装 JDK 7.0.55 并将 Java for Eclipse设置为 JDK 7.0.55。
  • 通过在构建路径 JDK 7.0.55 上配置,使用 JDK 7.0.55 构建项目。
  • 通过菜单Windows -> Preferences -> Java -> Compiler - 选择 1.7 在 Eclipse 中为 JDK 7.0.55 设置编译器。
于 2014-08-04T10:21:55.963 回答
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

请记住在安装新版本后将其删除,否则它将继续使用相同的旧版本,我希望它可以解决您的问题,在我的情况下就是这样。

于 2018-11-10T01:47:15.173 回答
3

由于 java 9-target被替换为--release.

在 java 11 之前,可用的数字--release6 7, 8, 9, 10, 11.
您可以猜测未来的版本将是12, 13, 并继续。

要为较旧的目标 jvm 编译,使用javac --release 7 Tmp.java// 这将生成可以在 jvm >= 7 上运行的 .class 文件,

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

javap -v Tmp | grep version

在输出中,major version确定目标 jvm 版本。

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

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

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

您可以通过命令找出当前 javac 支持哪些目标版本:
javac -help | grep releases

于 2019-01-08T13:45:39.630 回答
1

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

brew install Caskroom/cask/java
于 2015-08-04T09:45:23.157 回答
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以检查路径。

于 2017-03-18T17:43:53.127 回答
0

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

于 2014-11-28T13:59:33.220 回答
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/server/libjvm.so
之前添加以下两行

问题解决了。快乐编码。

于 2015-04-18T12:21:02.620 回答
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编译器设置,因此最好从这里调试。

于 2015-09-01T08:34:44.910 回答
0

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

添加它解决了这个问题。

于 2015-11-01T00:35:58.327 回答
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_HOME 的版本不同的 java 版本C:\Program Files (x86)\Apache\apache-tomcat-7.0.26\bin

于 2017-07-18T00:03:14.607 回答
0

如果您使用的是 ant,您可以在 build.xml 文件中为编译器指定“目标”,如下所示:

 <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>
于 2018-06-19T08:22:24.293 回答
0

许多答案是指 IDE 之类的 Eclipse。但是,这个问题与使用 Notepad++ 的本机开发有关。

命名错误的核心原因是使用的 Java 运行时环境和使用的类分别库不匹配。以下描述的目标是在不进行任何额外安装的情况下进行编译。

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-toolsdx 文件比其他组件更新。因此需要修改:

buildToolsVersion "23.0.1"

于 2020-02-23T17:27:47.743 回答
0

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

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

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

于 2020-04-02T05:09:47.200 回答
-1

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

于 2014-09-04T11:35:38.757 回答
-1

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

于 2016-07-16T23:58:14.310 回答
-1

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

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

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

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

于 2016-07-20T08:18:27.733 回答
-1
  1. 单击项目中的属性。
  2. 转到 Java 构建路径。
  3. 单击添加库。
  4. 单击 JRE 系统库上的下一步。如果默认未选中,请选择您需要的那个。
  5. 单击完成。

你完成了!

于 2016-10-12T21:54:43.810 回答
-1

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

找到tools.jarfor Java 7 并将其放回文件夹解决了我的问题。所以有什么可以尝试的。

于 2017-01-19T15:59:28.220 回答
-1

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

于 2019-01-13T18:08:05.753 回答
-1

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

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

于 2019-04-08T11:56:05.367 回答
-1

就我而言,问题是由于 $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
于 2019-08-14T09:41:28.927 回答