我有一个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目录:
错误堆栈跟踪:
Tomcat进程(使用JDK7运行):
用于编译的Javac版本:
我还知道为什么还会收到此错误?
提前谢谢
答案 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-fileupload
,commons-io
,poi
和rt
(这可能是问题吗?)
是:-) 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