“类型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-fileupload
,commons-io
,poi
和rt
(这可能是问题吗?)
是:-) 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编译器