无法解析java.io.ObjectInputStream类型。它是从所需的.class文件间接引用的

时间:2016-05-01 05:02:23

标签: java eclipse java-ee objectinputstream buildpath

我已经下载了Eclipse并试图创建一个示例servlet程序但是我收到了以下错误

  

无法解析java.io.ObjectInputStream类型。它是从所需的.class文件间接引用的

我已正确配置构建路径。 我正在使用Java 8和Apache Tomcat 7,并且两者的库都被正确引用。

问题仅适用于Java EE。通常Java SE项目运行正常。

10 个答案:

答案 0 :(得分:32)

Java 8 Update 91中发生了破坏现有JSP代码的事情。这似乎很清楚。以下是类似问题和错误报告的示例:

所有这些都与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)

您只需将Tomcat版本升级到Tomcat 8.0.xx. Java8< - > Tomcat8

这是我一直在使用的配置,它一直很好用 JDK version Tomcat versions

答案 2 :(得分:1)

与我同样的问题。这不是解决方案,而是一种解决方法,对我有用: Buildpath->配置buildpath-> Libraries->这里删除指向JRE8的JRE系统库,并为JRE7添加JRE系统库。

答案 3 :(得分:1)

使用最新的7.x Tomcat(目前为7.0.69)为我解决了问题

我们也尝试了一个老日食错误的解决方法,也许这也是解决问题的一部分?

https://bugs.eclipse.org/bugs/show_bug.cgi?id=67414

解决方法:

  • Window->偏好设置 - > Java->已安装的JRE
  • 取消选中所选的JRE
  • 单击“确定”(此步骤可以是可选的?)
  • 再次检查JRE

答案 4 :(得分:1)

解决方法:

窗口 - > 偏好设置 - > Java - > 已安装的JRE , 选择不同的JRE

也许这个JDK版不适合:

enter image description here

所以试试这个:

enter image description here

问题解决了!

答案 5 :(得分:1)

升级到tomcat 7.0.70解决了我的问题

答案 6 :(得分:1)

好的,这个问题是在一年前,但我最近也遇到了这个问题。

所以我做了什么:

  1. 将tomcat 7更新为tomcat 8.
  2. 更新到最新的java(java 1.8.0_141)。
  3. 更新项目>中的JRE系统库属性> Java构建路径。 确保它有最新版本,在我的情况下是jre1.8.0_141 (之前的版本是jre1.8.0_111)
  4. 当我完成前两个步骤时,它仍然没有删除错误,所以最后一步很重要。它没有自动更改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