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

时间:2015-06-04 12:31:31

标签: java tomcat tomcat6

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

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

Stackoverflow已经发布了关于此错误的帖子,但 所有这些都解决了使用JDK7 编译.java文件的问题,以及使用相同的tomcat版本(我的意思是,下面是JDK8,这似乎是问题,因为某些IDE版本和tomcat版本不支持它。)

问题在于我使用.java 构建了我的应用(JDK 1.7.0_79文件),还有我&# 39;我的tomcat 6服务器使用相同的服务器

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

我的JVM目录:​​

enter image description here

错误堆栈跟踪:

enter image description here

Tomcat进程(使用JDK7运行):

enter image description here

用于编译的Javac版本:

enter image description here

我还知道为什么还会收到此错误?

提前谢谢

3 个答案:

答案 0 :(得分:4)

使用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中的版本不匹配。

远程它,它应该工作。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我有tomcat-7.0.22和jdk1.8.0_45,我用tomcat-8.0.43中包含的ecj-4.6.1.jar文件替换了tomcat / lib目录下的ecj-3.7.jar文件并且摆脱了错误。 有关更多信息,请查看此帖How to change tomcat compiler