我已经下载了Eclipse并试图创建一个示例servlet程序但是我收到了以下错误
无法解析java.io.ObjectInputStream类型。它是从所需的.class文件间接引用的
我已正确配置构建路径。 我正在使用Java 8和Apache Tomcat 7,并且两者的库都被正确引用。
问题仅适用于Java EE。通常Java SE项目运行正常。
答案 0 :(得分:32)
Java 8 Update 91中发生了破坏现有JSP代码的事情。这似乎很清楚。以下是类似问题和错误报告的示例:
java.io.ObjectInputStream
的更改“使其与RHEL6当前的ECJ版本不兼容”)所有这些都与Java 8 Update 91(或更高版本)在使用早期JRE / JDK版本时不存在的问题有关。
2016年1月22日起的以下OpenJDK变更集似乎相关:http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/rev/32f64c19b5fb(提交消息“8144430:改进JMX连接”)。变更集似乎与此漏洞https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-3427有关,该漏洞在此Red Hat错误报告https://bugzilla.redhat.com/show_bug.cgi?id=1336481的评论中提及。
更新91发行说明文档提及JDK-8144430(非公开机票):http://www.oracle.com/technetwork/java/javase/8u91-relnotes-2949462.html。
在“Oracle重要补丁更新公告 - 2016年4月”中,提到了CVE-2016-3427漏洞:http://www.oracle.com/technetwork/security-advisory/cpuapr2016v3-2985753.html。
答案 1 :(得分:3)
答案 2 :(得分:1)
答案 3 :(得分:1)
使用最新的7.x Tomcat(目前为7.0.69)为我解决了问题。
我们也尝试了一个老日食错误的解决方法,也许这也是解决问题的一部分?
https://bugs.eclipse.org/bugs/show_bug.cgi?id=67414
解决方法:
答案 4 :(得分:1)
解决方法:
窗口 - > 偏好设置 - > Java - > 已安装的JRE , 选择不同的JRE
也许这个JDK版不适合:
所以试试这个:
问题解决了!
答案 5 :(得分:1)
升级到tomcat 7.0.70解决了我的问题
答案 6 :(得分:1)
好的,这个问题是在一年前,但我最近也遇到了这个问题。
所以我做了什么:
当我完成前两个步骤时,它仍然没有删除错误,所以最后一步很重要。它没有自动更改jre的构建路径。
答案 7 :(得分:1)
我正在使用谷歌appengine java sdk,并面临类似的问题。我不得不添加
<runtime>java8</runtime>
在appengine-web.xml文件中使其工作。
答案 8 :(得分:0)
我也面临同样的问题。我有Jdk1.7.0.79。然后我用Jdk8.0.120更新了它。然后问题解决了。成功完成升级后的jdk。转到项目 - &gt;清理。它将重建项目,并且将消除所有红色警报。
答案 9 :(得分:0)
原因: Tomcat 6 JSP编译器的旧版本似乎没有意识到JDK 8常量池的增强-例如。方法句柄。 JDK 8u中的新代码正在使用方法句柄,而不是创建匿名类。这将导致方法句柄在常量池中列出,并且eclipse编译器将对此阻塞-https://bz.apache.org/bugzilla/show_bug.cgi?id=56613