当前位置: 首页 > 知识库问答 >
问题:

Java ClassVersionError虽然版本似乎还可以

公孙令秋
2023-03-14

我的java web应用程序中出现以下错误(应用程序启动正常,但当我单击按钮时,会出现以下错误)。我正在使用Tomcat(7.0.109)运行这个应用程序 编译而成的,该版本的java运行时只识别52.0以下的类文件版本(无法加载类[filedetailsservlet])

之前我使用的是Java15(类版本59.0)。但后来因为其他第三方应用,我转而使用JDK和JRE 1.8.0ķ(类版本高达52.0)

以下是我做的一些事情

  1. 我已经使用这个
    javap-verbose FileDetailsServlet | findstr“major”命令检查了FileDetailsServlet类的类版本。它显示的版本是51.0(Java7)
  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。有办法吗?


共有1个答案

金承嗣
2023-03-14

检查你的类路径,看是否有旧系统中的任何“剩菜”。看起来您没有检查正确的文件。也许你把FileDetailsServlet作为依赖项放在了错误的版本中,或者只是放在一个“独立”的JAR或WAR文件中。

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

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

 类似资料:
  • 我试图创建一个函数,使用不同的字段作为权重将数据分成十分之一,这样我就可以有相等的暴露桶。在这样做的时候,我创建了一个简单的例子,我试图进入3个桶。我确实在第一部分遇到了困难,那就是让这个while循环工作起来: 我的成绩是0,0 谢谢!

  • 当我认为我已经做了所有正确的事情时,Mockito似乎抛出了一个。这是我的部分测试案例: 下面是分部类和方法: 忽略了一个事实,即您永远不应该模拟您不拥有的接口,为什么Mockito会给我以下消息?

  • 在生命数==0之后,while语句为false,必须退出循环。但在这种情况下,即使循环为false,也会执行循环。

  • 只要给定条件为True,它就会执行一系列语句。 此循环结构的语法是 - While condition [ statements ] [ Continue While ] [ statements ] [ Exit While ] [ statements ] End While 这里,语句可以是单个语句或语句块。 条件可以是任何表达式,而true是逻辑真的。 当条

  • 出于某种原因,在每秒27个请求的情况下,我们开始发现okhttp有时会出现问题,我们注意到每个主机的请求限制为5个。我们正在讨论的api有时会出现问题/超时等。 我注意到我们没有在超时时取消请求,它们似乎仍在飞行中。(即。我想开始使用RealCall.cancel) 在调查这件事的过程中。取消呼叫引擎。取消()如果引擎不为null,则调用streamAllocation。cancel()调用以下代

  • WebFlux、反应式和处理程序的新功能。 我能得到单声道 任何对Account tRequest estHandler中代码的帮助/输入都将不胜感激,尤其是解释建议更改背后的基本原理。 路由器实现(分解为仅“POST”)。。。 处理程序实现...我真正做添加的代码,然后单独创建一个服务器响应,是我关注的。它看起来“笨拙”,尤其是因为AccountService.addAccount()在完成时返