Java ClassVersionError 虽然版本似乎没问题

发布于 2025-01-09 15:58:01 字数 841 浏览 0 评论 0原文

我在我的 java web 应用程序中收到以下错误(应用程序启动正常,但当我单击按钮时会发生以下错误)。我正在使用 Tomcat (7.0.109) 来运行此应用程序。
java.lang.UnsupportedClassVersionError: FileDetailsS​​ervlet 已由更新的
版本的 Java 运行时(类文件版本 59.0)编译,此版本的 Java 运行时仅识别
最高版本为 52.0 的类文件(无法加载类 [FileDetailsS​​ervlet])

以前我使用过 Java 15(类版本 59.0)。但后来因为其他第 3 方应用程序,我切换到 JDK 和 JRE 1.8.0_311(类版本高达 52.0)。

这是我所做的一些事情

  1. 我已经使用此检查了FileDetailsS​​ervlet类的类版本
    javap -verbose FileDetailsS​​ervlet| findstr“主要”
    命令。它显示版本是51.0(Java 7)。
  2. 我已在 Eclipse 中将 JDK 合规性设置为 1.8。 (项目特定设置)
  3. 更改 JDK 后,我使用 JDK 1.8.0_311 重新编译了所有文件,
  4. 我检查了环境变量。 JAVA_HOME 是“C:\Program Files\Java\jdk1.8.0_311” JRE_HOME 为“C:\Program Files\Java\jre1.8.0_311”,路径为“C:\Program Files\Java\jdk1.8.0_311\bin"

我错过了什么吗?我无法返回到 Java 15。那么有什么办法吗?

I'm getting the following error in my java web app (The application launches okay but when I click a button following error occurs). I'm using Tomcat (7.0.109) to run this application.
java.lang.UnsupportedClassVersionError: FileDetailsServlet has been compiled by a more recent
version of the Java Runtime (class file version 59.0), this version of the Java Runtime only
recognizes class file versions up to 52.0 (unable to load class [FileDetailsServlet])

Previously I used Java 15 (class version 59.0). But then I switched to JDK and JRE 1.8.0_311 (class version upto 52.0)because of other 3rd party apps.

Here are some things that I did

  1. I've checked class version of FileDetailsServlet class using this
    javap -verbose FileDetailsServlet| findstr "major"
    command. And it shows that version is 51.0 (Java 7).
  2. I've set JDK compliance to 1.8 in eclipse. (Project specific settings)
  3. After changing JDK I recompiled all the files using JDK 1.8.0_311
  4. I've checked environment variables. JAVA_HOME is "C:\Program Files\Java\jdk1.8.0_311"
    JRE_HOME is "C:\Program Files\Java\jre1.8.0_311" and Path is "C:\Program
    Files\Java\jdk1.8.0_311\bin"

Am I missing anything? I can not go back to Java 15. So is there any way around?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

離人涙 2025-01-16 15:58:01

检查您的类路径是否有旧系统中的任何“剩余内容”。您似乎没有检查正确的文件。也许您的 FileDetailsS​​ervlet 版本错误,或者只是在“独立”JAR 或 WAR 文件中。

同样重要的是,单独的 Eclipse 设置可能无法涵盖所使用的容器如何为 servlet 提供服务,那么您使用哪种技术来运行 FileDetailsS​​ervlet?这是关键点:你用来运行的东西(Tomcat、Jetty、其他容器,可能包含在 Sprint Boot 或其他类似技术的 fat WAR 或 fat JAR 文件中)必须使用正确的 .class 文件。

当您使用 Tomcat 作为容器时:
您应该检查 tomcat 文件夹下 webapps/appname 文件夹中的类文件(将 appname 替换为部署上下文名称)。注意:当您从 Eclipse 运行 tomcat 时,这可能与安装文件夹位于磁盘上,但我没有准备好 Eclipse 安装来检查该文件夹。

Check your class path for any "leftovers" from the old system. It looks like you are not inspecting the correct files. Maybe you have the FileDetailsServlet in a wrong version as depencency somewhere, or just in a "standalone" JAR- or WAR-file.

It is also important that Eclipse settings alone will maybe not cover, how the used container serves the servlet, so which technology do you use to run the FileDetailsServlet? That's the crucial point: this thing that you use to run (Tomcat, Jetty, other container, maybe included in a fat WAR or fat JAR file from Sprint Boot or another similar technology) has to use the correct .class file.

As you are using Tomcat as container:
You should check the class files inside the folder webapps/appname folder below your tomcat folder (replace appname with the deployment context name) Take care: when you run tomcat from Eclipse this could be somewhere completely different than the installation folder on disk, but I don't have an Eclipse installation ready to check that.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文