“类型java.util.Map $ Entry无法解析”(tomcat6 + JDK7)

我有一个JSP应用程序,它给我错误:

The type java.util.Map$Entry cannot be resolved. It is indirectly referenced from required .class files 

Stackoverflow充满了关于这个错误的post,但所有这些都解决了使用JDK7编译.java文件 ,加上使用相同版本的tomcat(我的意思是,下面是JDK8,这似乎是问题所在,因为有些IDE版本和tomcat版本不支持它)。

问题是 使用JDK 1.7.0_79 构建了我的应用程序.java文件),加上我使用相同的tomcat 6服务器

所以在任何地方都没有JDK 8 ……有些数据截图:

我的JVM目录:

在此处输入图像描述

错误堆栈跟踪:

在此处输入图像描述

Tomcat进程(使用JDK7运行):

在此处输入图像描述

用于编译的Javac版本:

在此处输入图像描述

任何想法为什么我仍然会收到此错误?

先感谢您

使用Java 6运行Tomcat或升级到Tomcat 7并确保在类路径上没有一些旧的Java 5 / pre-generics库。

为什么会出现这个错误? JSP代码中的某个地方(不是您的代码,请注意)是对java.util.Map.Entry的依赖。 这可能是Jasper从JSP生成的代码。

这不是直接的依赖; 而你的代码(或从JSP生成的Java代码)需要其他需要java.util.Map.Entry东西

但界面在某种程度上发生了变化。 通常,这与Java 8一样,因为他们添加了新的静态帮助器方法:类的名称是相同的(这使得错误如此混乱)但API已经改变,代码无法找到某些东西(或找到的东西)它没想到)。

当您尝试针对pre-generics类进行编译时,可能会发生类似的问题(即使这应该有效)。

更糟糕的是,在JSP中import java.util.Map 。 这是其他地方的现有字节码导致麻烦。

[编辑]

在我的/WEB-INF/lib/文件夹中我有: commons-fileuploadcommons-iopoirt (这可能是问题吗?)

是:-) rt.jar是Java运行时。 它包含java.* ,在您的情况下,是java.util.Map一个版本,它与Java VM中的版本不匹配。

远程它应该工作。

Eclipse Mars,JDK 8和Tomcat Maven插件也遇到了同样的问题。 解决了在我的pom.xml中将插件版本更改为2.2的问题。

我有tomcat-7.0.22和jdk1.8.0_45,我用tomcat-8.0.43中包含的ecj-4.6.1.jar文件替换了tomcat / lib目录下的ecj-3.7.jar文件摆脱错误。 有关更多信息,请看这篇文章如何更改tomcat编译器