Тип java.io.ObjectInputStream не может быть разрешен. На него косвенно ссылаются необходимые файлы.class
Я скачал Eclipse и попытался создать пример программы сервлета, но я получил следующую ошибку
Тип java.io.ObjectInputStream не может быть разрешен. На него косвенно ссылаются необходимые файлы.class
Я правильно настроил путь сборки. Я использую Java 8 и Apache Tomcat 7, и библиотеки для обеих ссылок указаны правильно.
Проблема специально для Java EE. Обычно проекты Java SE работают нормально.
10 ответов
В Java 8 Update 91 произошло что-то, что сломало существующий код JSP. Это кажется довольно ясным. Вот пример похожих вопросов и сообщений об ошибках:
- Невозможно скомпилировать файл JSP с JDK1.8.0_92
- Spring MVC - Невозможно скомпилировать класс для JSP
- Невозможно получить доступ к клиенту CloudPlatform
- https://bugs.openjdk.java.net/browse/JDK-8155588 (закрыто как "не проблема")
- https://bugs.openjdk.java.net/browse/JDK-8155223 (закрыто как "не проблема")
- https://access.redhat.com/solutions/2294701
- https://alluxio.atlassian.net/browse/ALLUXIO-1956
- https://jira.atlassian.com/browse/CWD-4729
- https://community.exoplatform.com/portal/intranet/forum/topic/topic991e097d9e45345236bb2bd1920a4c68
- https://issues.apache.org/jira/browse/OOZIE-2533 (из комментария: "Это действительно похоже на ошибку JDK")
- https://bugzilla.redhat.com/show_bug.cgi?id=1337940 (комментарий 2 упоминает об изменении
java.io.ObjectInputStream
в обновлении 91, которое "сделало его несовместимым с текущей версией RJEL6 ECJ") - https://github.com/mit-cml/appinventor-sources/issues/814
- https://community.oracle.com/thread/3953395
Все это касается проблем с Java 8 Update 91 (или более поздней версии), которые отсутствуют при использовании более ранних версий JRE/JDK.
Следующая ревизия OpenJDK от 22 января 2016 года, по-видимому, связана: 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 Critical Patch - апрель 2016 года" упоминается уязвимость CVE-2016-3427: http://www.oracle.com/technetwork/security-advisory/cpuapr2016v3-2985753.html.
Причина: старые версии JSP-компилятора Tomcat 6, похоже, не знают об улучшениях пула констант JDK 8 - например. метод обрабатывает. Новый код в JDK 8u использует дескриптор метода вместо создания анонимного класса. Это приведет к тому, что дескриптор метода будет указан в пуле констант, и компилятор eclipse будет его подавлять - https://bz.apache.org/bugzilla/show_bug.cgi?id=56613
Хорошо, этот вопрос был год назад, но у меня недавно тоже была эта проблема.
Итак, что я сделал:
- Обновите Tomcat 7 до Tomcat 8.
- Обновление до последней версии Java (Java 1.8.0_141).
- Обновите Системную библиотеку JRE в Project> Properties> Java Build Path. Убедитесь, что у него самая последняя версия, в моем случае это jre1.8.0_141 (до того, как была предыдущая версия jre1.8.0_111)
Когда я сделал первые два шага, это все еще не устраняет ошибку, поэтому последний шаг важен. Он не изменил автоматически путь сборки для JRE.
Та же проблема со мной. Это не решение, а обходной путь, который мне помог: Buildpath->Configure buildpath->Libraries-> Здесь удалите системную библиотеку JRE, указывающую на JRE8, и добавьте системную библиотеку JRE для JRE7.
Использование последней версии 7.x Tomcat (в настоящее время 7.0.69) решило проблему для меня.
Мы также попытались обойти старый баг затмения, возможно, это тоже помогло решить проблему?
https://bugs.eclipse.org/bugs/show_bug.cgi?id=67414
Временное решение:
- Окно-> Настройки->Java-> Установленные JRE
- Снимите отметку с выбранного JRE
- Нажмите OK (этот шаг может быть необязательным?)
- Проверьте JRE снова
Временное решение:
Окно -> Настройки -> Java -> Установленные JRE, выберите другую JRE
возможно это издание JDK не подходит:
Так что попробуйте этот вместо:
Задача решена!
Я использую Google Appengine Java SDK и столкнулся с аналогичной проблемой. Я должен был добавить
<runtime>java8</runtime>
в файле appengine-web.xml, чтобы заставить его работать.
Я также столкнулся с той же проблемой. У меня был Jdk1.7.0.79. Затем я обновил его с помощью Jdk8.0.120. Тогда проблема решена. После успешного завершения обновления JDK. Перейти к проекту-> очистить. Это перестроит проект, и все красные предупреждения будут устранены.