"The type java.util.Map$Entry cannot be resolved" (tomcat6 + JDK7)

"The type java.util.Map$Entry cannot be resolved" (tomcat6 + JDK7)

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

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

Whosebug 充满了关于这个错误的post,但是所有这些都可以通过使用JDK编译.java文件来解决7,加上使用相同版本的 tomcat(我的意思是,低于 JDK8 这似乎是问题所在,因为某些 IDE 版本和tomcat 个版本不支持。

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

所以哪里都没有JDK 8...一些带数据的截图:

我的 JVM 目录:

错误堆栈跟踪:

Tomcat 进程(运行 使用 JDK7):

用于编译的Javac版本:

知道为什么我仍然会收到此错误吗?

提前致谢

运行 Tomcat 使用 Java 6 或升级到 Tomcat 7 并确保你没有一些旧的 Java 5/ class路径上的前泛型库。

为什么会出现这个错误? JSP 代码中的某处(注意,不是你的代码)依赖于 java.util.Map.Entry。这可能在 Jasper 从您的 JSP.

生成的代码中

这不是直接依赖;相反,您的代码(或从您的 JSP 生成的 Java 代码)需要其他东西,然后需要 java.util.Map.Entry

但是界面在某些方面发生了变化。通常,这是 Java 8 因为他们添加了新的静态辅助方法: class 的 name 是相同的(这使得错误如此混乱) 但 API 已更改,代码无法找到某些东西(或找到它没有预料到的东西)。

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

更糟糕的是,您的 JSP 中的 import java.util.Map 有效。导致问题的是其他地方的现有字节码。

[编辑]

In my /WEB-INF/lib/ folder I've: commons-fileupload, commons-io, poi and rt (may this one be the problem?)

是 :-) 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/lib 目录中的 ecj-3.7.jar 文件tomcat-8.0.43 中包含的 ecj-4.6.1.jar 文件消除了错误。 有关更多信息,请查看此 post How to change tomcat compiler