Java 使用jdk 8后编译JSP时出错

Java 使用jdk 8后编译JSP时出错,java,jsp,Java,Jsp,我得到的错误是: org.apache.jasper.JasperException: JBWEB004062: Unable to compile class for JSP: JBWEB004061: An error occurred at line: 1 in the generated java file The type java.util.Map$Entry cannot be resolved. It is indirectly referenced from requ

我得到的错误是:

org.apache.jasper.JasperException: JBWEB004062: Unable to compile class for JSP: 

JBWEB004061: An error occurred at line: 1 in the generated java file
The type java.util.Map$Entry cannot be resolved. It is indirectly referenced from    required .class files
我在互联网上读了很多文章,都在争论这个问题,他们都试图通过更改eclipse版本、关闭eclipse并重新启动、或者在类路径中定义JDK的工作区默认版本来解决这个问题

我尝试了前两个选项,但都不起作用,但第三个不行,因为我必须使用jdk 8,而不是7

在我使用JDK 7之前,一切都很好。
那么,为了使用jdk 8正确编译,我应该做些什么呢?

请记住,在使用Eclipse时,您只是偶尔使用jdk。Eclipse嵌入式编译器主要与JDK javac可执行文件兼容;除了它是一个不同的编译器(有时是可检测的),因为它有一堆钩子和重写来提供Eclipse中流行的编辑器反馈

我将研究在命令行上编译JSP,以简化由于编译环境不匹配导致的问题。在命令行中,您将只使用Java工具,因此Eclipse IDE可能无法完全按照标准工作的担忧消失了。

[p>[SOLVED]
看起来我使用的是旧版本的ecj(ecj3.7.2redhat-1.jar)。使用最新版本(ecj-4.3.1.jar),它工作正常。

我在jboss-5.1.0.GA和jboss-eap-5.2中解决了这个问题,系统需要在两种平台上运行。您需要将jboss的目录/server/default/deploy/jbossweb.sar中的文件jasper jdt.jar替换为ecj-4.3.1.jar,并将其重命名为jasper-jdt.jar。(注意:在应用更改之前备份原始jasper-jdt.jar)

因此:
将jasper-jdt.jar替换为ecj-4.3.1.jar,并将其重命名为ecj-4.3.1.jarjasper-jdt.jar

查看您的代码会很有趣。运行Tomcat时使用的是哪个JDK版本?首先,实际上我正在使用JBoss 7.0(EAP 6.2),它被设置在jdk1.8.0上_73@AlexR这是一个庞大的项目,我甚至不知道哪个JSP会引发错误。有没有新版本的JBoss可以尝试?这里没有涉及到他的IDE中的编译器,这是在服务器上运行时发生的。@nitd,是否有人使用了Java8特定的映射调用?例如,
getOrDefault(…)
在Java7中不存在,可能会导致支持Java7的web服务器上的编译器失败,这可能被误传为类未找到错误。在这种情况下,即使代码被编译为Java7字节码标准,运行时也会因为缺少Java8版本的Map而失败。