Не удалось скомпилировать класс для JSP: тип java.утиль.Запись Map$не может быть разрешена. На него косвенно ссылаются из required.файл класса


Я не могу заставить tomcat7 компилировать JSP. Это до запуска примера сервлетов просто отлично, и служба работает и работает. Я запускаю oracle java 8.

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

вот stacktrace:

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's an example of
a very basic SimpleTag handler with no body.</p>
<br>
<b><u>Result:</u></b>
<mytag:helloWorld/>
</body>
</html>
11 65

11 ответов:

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

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

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

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

посмотреть следующие ссылки:

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

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

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

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

Если вы используете maven, то вы можете добавить tomcat7-maven-плагин для вашего pom.XML и он должен работать нормально. Этот плагин будет запускать проект на Tomcat servlet container версии 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>

надеюсь, что это полезно! Спасибо

С база знаний JIRA:

Symptoms

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

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

далее появляется в компании Atlassian-JIRA для.журнал:

     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 кэшируется .ява и. файлы классов, созданные JSP-парсер они используются веб-приложения. Иногда они получают поврежден или не может быть найден. Это может произойти после обновления или обновления это содержит изменения в JSP.

Resolution

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

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

это сработало для меня, но мне также нужно было добавить . Кажется, что приведенный выше ответ верен, что если у вас есть новый tomcat, вам не нужно добавлять эти строки, но поскольку я не мог изменить всю свою систему, это сработало.
Спасибо

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

и <%@page import="java.util.Map.Entry"%> в ваш jsp файл

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

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

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

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

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

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

там также, кажется, связь с IDE в использовании.

я столкнулся с этим раньше, как другие, сказал: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>

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