Невозможно скомпилировать класс для JSP: тип java.util.Map $Entry не может быть разрешен. Это косвенно ссылается на требуемые файлы .class

Я не могу заставить tomcat7 скомпилировать jsps. Он просто запускает пример сервлетов, и сервис работает. Я запускаю oracle java 8.

Может ли кто-нибудь указать мне в правильном направлении?

Вот стек:

type Exception report

message Unable to compile class for JSP:

description The server encountered an internal error that prevented it from fulfilling this request.

exception

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

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

Stacktrace:
    org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:102)
    org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:331)
    org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:468)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:378)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:646)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.35 logs.

Код выглядит так, и это пример кода из tomcat7, поэтому я предполагаю, что он правильный.

<%@ taglib prefix="mytag" uri="/WEB-INF/jsp2/jsp2-example-taglib.tld" %>
<html>
<head>
  <title>JSP 2.0 Examples - Hello World SimpleTag Handler</title>
</head>
<body>
<h1>JSP 2.0 Examples - Hello World SimpleTag Handler</h1>
<hr>
<p>This tag handler simply echos "Hello, World!"  It an example of
a very basic SimpleTag handler with no body.</p>
<br>
<b><u>Result:</u></b>
<mytag:helloWorld/>
</body>
</html>

Ответ 1

Вы должны использовать более новую версию tomcat, которая поддерживает JDK 8.

Я могу подтвердить, что apache-tomcat-7.0.35 НЕ поддерживает JDK8, я также могу подтвердить, что apache-tomcat-7.0.50 имеют поддержку JDK8.

Ответ 2

Формат класса JDK8 изменился, и именно поэтому Tomcat не может скомпилировать JSP. Попробуйте получить более новую версию Tomcat.

У меня недавно была та же проблема. Это ошибка в Tomcat, или, скорее, JDK 8 имеет немного отличающийся формат файла классов, чем предыдущие версии JDK8. Это вызывает несогласованность, и Tomcat не может скомпилировать JSP в JDK8.

См. следующие ссылки:

Ответ 3

Поскольку мы работаем на Ubuntu 12.04 LTS, а последний официальный поддерживаемый пакет tomcat7 - 7.0.26, мы не можем легко обновить весь tomcat.

Я пытаюсь проверить с помощью jdk8, я смог решить эту проблему, изменив некоторые банки против их последней версии 7.0. *.

Я переключил jasper.jar, jasper-el и tomcat-util на версию 7.0.53 и добавил ecj-4.3.1.jar. Это возвращает приложение обратно.

НО... также я изменил упакованный контент с этим, так что, возможно, было бы лучше загрузить весь tomcat и использовать его самостоятельно, как испортить пакеты. Поэтому, пожалуйста, смотрите это только как очень грязный quickhack или обходной путь.

Ответ 4

Если вы используете maven, вы можете добавить плагин tomcat7-maven в свой pom.xml, и он будет работать нормально. Этот плагин будет запускать проект на контейнере сервлетов Tomcat версии 7.0.47, который поддерживает JDK 1.8.

    <plugins>
    <plugin>
     <groupId>org.apache.tomcat.maven</groupId>
     <artifactId>tomcat7-maven-plugin</artifactId>
     <version>2.2</version>
     <configuration>
<!-- Include context file for Datasource configuration -->
     <contextFile>./src/main/webapp/META-INF/context.xml</contextFile>
    <port>8080</port>
     </configuration>
     <dependencies>
<!-- Include jdbc driver dependency if using datasource (in my case oracle) -->
    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc6</artifactId>
        <version>11.2.0.4.0</version>
    </dependency>
  </dependencies>
    </plugin>
    </plugins>

Надеюсь, это полезно! Благодаря

Ответ 5

Добавьте этот импорт <%@page import="java.util.Map" %>

Это сработало для меня, но мне также нужно было добавить <% @page import = "java.util.HashMap" % > . Кажется, что вышеприведенный ответ верен, что если у вас есть новый tomcat, вам может не понадобиться добавлять эти строки, но поскольку я не мог изменить всю свою систему, это сработало.
Спасибо вам

Ответ 6

Из базы знаний JIRA:

Symptoms

Действия рабочего процесса могут быть недоступны

  • JIRA может создавать исключения на экране
  • Может существовать одно или оба из следующих условий:

В atlassian-jira.log появляется следующее:

     2007-12-06 10:55:05,327 http-8080-Processor20 ERROR [500ErrorPage] 
     Exception caught in500 page Unable to compile class for JSP
    org.apache.jasper.JasperException: Unable to compile class for JSP
   at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:572)
   at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:305)

_

Cause:

Контейнер Tomcat кэширует файлы .java и .class, созданные JSP, они используются веб-приложением. Иногда это получается поврежден или не найден. Это может произойти после обновления или обновления который содержит модификации JSP.

Resolution

1.Удалить содержимое рабочей папки при использовании автономной JIRA или/работать при использовании установки EAR/WAR, 2. Убедитесь, что пользователь, выполняющий JARA-приложение, имеет разрешение на чтение/запись в каталоге /work. 3. Перезагрузите контейнер приложения JIRA для восстановления файлов.

Ответ 7

Столкнулась с той же проблемой при обновлении моего приложения от java 6 до java 8 на tomcat 7.0.19. После обновления tomcat до 7.0.59 эта проблема будет решена.

Ответ 8

Попробуйте добавить <%@page import="java.util.Map.Entry"%> в файл jsp

Ответ 9

Есть много правильных/одинаковых ответов, но для будущих ссылок:

То же самое относится к Tomcat 7. Помните, что обновление только используемых вами фреймворков (как предложено в других подобных вопросах) недостаточно.

Вам также необходимо обновить версию плагина Tomcat. Что работало для меня с использованием Java 7, было обновление до версии 2.2 tomcat7-maven-plugin (= Tomcat 7.0.47).

Ответ 10

Недавно я столкнулся с одной и той же проблемой. Я использовал IntelliJx64 с Tomcat7.0.32 с jdk.8.0.102. Тогда не было проблем. Мне удалось напрямую получить доступ к моему развертыванию localhost: [порт] без добавления [mywebapp] или /ROOT.

Когда я попытался перейти на eclipse neon, , я наткнулся на ту же ошибку, что обсуждался, когда я пытался установить путь как пустую строку. Когда я принуждал среду выполнения к Java7 и устанавливал модули для ее удаления, она не решила проблему выхода. Однако, когда я изменил мою установку tomcat на 7.072 и вручную изменил конфигурацию пути контекста на path = "", проблема была решена в eclipse. (Вы можете управлять путём с помощью сервера двойного щелчка и переходить на вкладку модуля.)

Интересно, почему IntelliJ не выдавал никаких проблем с той же ошибкой, которая должна была быть связана с версией установки tomcat?

Также существует связь с используемой IDE.

Ответ 11

Я столкнулся с этим раньше, как говорили другие: просто upgrade jetty plugin

если вы используете maven

перейдите в jetty плагин в pom.xml и обновите его до

<plugin>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>9.3.0.v20150612</version>
    <configuration>
        <scanIntervalSeconds>3</scanIntervalSeconds>
        <httpConnector>
            <port>${jetty.port}</port>
            <idleTimeout>60000</idleTimeout>
        </httpConnector>
        <stopKey>foo</stopKey>
        <stopPort>${jetty.stop.port}</stopPort>
    </configuration>
</plugin>

надеюсь, что это поможет вам