web-dev-qa-db-fra.com

Impossible de compiler la classe pour JSP: le type Java.util.Map $ entry ne peut pas être résolu. Il est indirectement référencé à partir des fichiers .class requis

Je ne parviens pas à faire compiler JSPS avec Tomcat7. Jusqu'à ce que les exemples de servlets soient exécutés, le service est opérationnel. J'utilise Oracle Java 8.

Est-ce que quelqu'un peut-il me montrer la bonne direction?

Voici le 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.

Le code ressemble à ceci et c'est l'exemple de code de Tomcat7, donc je suppose qu'il est correct. 

<%@ 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>
66
user2130951

Vous devez utiliser une version plus récente de Tomcat prenant en charge JDK 8.

Je peux confirmer que Apache-Tomcat-7.0.35 N'A PAS de support pour JDK8, je peux également confirmer que Apache-Tomcat-7.0.50 supporte JDK8.

93
Brett Ryan

Le format de classe de JDK8 a changé et c’est la raison pour laquelle Tomcat n’est pas en mesure de compiler les JSP. Essayez d’obtenir une version plus récente de Tomcat.

J'ai eu récemment le même problème. Il s'agit d'un bogue dans Tomcat, ou plutôt JDK 8 a un format de fichier de classe légèrement différent de celui des versions antérieures à JDK8. Cela entraîne des incohérences et Tomcat n'est pas en mesure de compiler les JSP dans JDK8.

Voir les références suivantes:

13
Aleš

Si vous utilisez maven, vous pouvez ajouter le plugin Tomcat7-maven-plugin à votre fichier pom.xml et il fonctionnera correctement. Ce plugin exécutera le projet sur la version 7.0.47 du conteneur de servlets Tomcat, qui prend en charge 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>

J'espère que c'est utile! Merci

2
Hasan K

Étant donné que nous fonctionnons sous Ubuntu 12.04 LTS et que le dernier package Tomcat7 officiellement pris en charge est la version 7.0.26, nous ne pouvons pas facilement mettre à jour l'ensemble de Tomcat.

Pour pouvoir tester avec le jdk8, j'ai pu résoudre ce problème en modifiant certains fichiers jar par rapport à leur dernière version 7.0. *.

J'ai commuté jasper.jar, jasper-el et Tomcat-util vers la version 7.0.53 et ajouté ecj-4.3.1.jar. Cela ramène l'application en ligne.

MAIS ... j'ai aussi changé le contenu empaqueté avec cela, alors peut-être serait-il préférable de télécharger l'ensemble de Tomcat et de l'utiliser en tant qu'installé comme désordre. Donc, s'il vous plaît, voyez ceci uniquement comme un quickhack ou une solution de contournement très sale.

2
user3480817

Ajouter cette importation <%@page import="Java.util.Map" %>

Cela a fonctionné pour moi, mais je devais aussi ajouter <% @ page import = "Java.util.HashMap"%> . Il semble que la réponse ci-dessus soit vraie, que si vous avez le nouveau Tomcat, vous n'aurez peut-être pas besoin de d'ajouter ces lignes, mais comme je ne pouvais pas changer tout mon système, cela a fonctionné.
Je vous remercie

0

Essayez d’ajouter <%@page import="Java.util.Map.Entry"%> à votre fichier jsp

0
Williams Tobi

Il y a beaucoup de réponses correctes/identiques, mais pour les références futures:

Même chose pour Tomcat 7. Sachez que mettre à jour uniquement les versions de vos frameworks utilisés (comme proposé dans d'autres questions similaires) ne suffit pas.

Vous devez également mettre à jour la version du plugin Tomcat . Ce qui a fonctionné pour moi, avec Java 7, a été de passer à la version 2.2 de Tomcat7-maven-plugin (= Tomcat 7.0.47).

0
thodorisbais

À partir de la base de connaissances JIRA :

Symptoms

Les actions de workflow peuvent être inaccessibles

  1. JIRA peut lancer des exceptions à l'écran
  2. Une ou les deux conditions suivantes peuvent exister:

Ce qui suit apparaît dans le fichier 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:

Le conteneur Tomcat met en cache les fichiers .Java et .class générés par le fichier Analyseur JSP, ils sont utilisés par l’application Web. Parfois, ils obtiennent corrompu ou introuvable. Cela peut se produire après un correctif ou une mise à niveau qui contient des modifications aux JSP.

Resolution

1. Supprimez le contenu du dossier/work si vous utilisez JIRA autonome ou/work si vous utilisez l'installation de EAR/WAR . 2. Vérifiez que l'utilisateur qui exécute le processus d'application JIRA dispose de l'autorisation de lecture/écriture pour le répertoire/work .. .. 3. Redémarrez le conteneur d'applications JIRA pour reconstruire les fichiers.

0
Engineer

J'ai rencontré exactement le même problème lors de la mise à niveau de mon application de Java 6 à Java 8 sur Tomcat 7.0.19 . Après la mise à niveau de Tomcat vers la version 7.0.59, ce problème est résolu.

0
nshweta

J'ai déjà rencontré ce problème auparavant, comme d'autres l'ont dit: upgrade jetty plugin 

si vous utilisez maven 

accédez au plug-in jetty dans pom.xml et mettez-le à jour en 

<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>

espérons que cela vous aide 

0

J'ai récemment eu le même problème. J'utilisais en utilisant IntelliJx64 avec Tomcat7.0.32 avec jdk.8.0.102. Il n'y avait aucun problème alors. J'ai pu accéder directement à mon déploiement localhost: [port] sans ajouter [mywebapp] ni / ROOT.

Lorsque j'ai essayé de migrer vers Eclipse neon,, je suis tombé sur le même bogue que celui décrit lorsque j'ai essayé de définir le chemin comme chaîne vide. Lorsque j'ai imposé l'environnement d'exécution à Java7 et que les modules étaient vides, le problème n'a pas été résolu. Cependant, lorsque j'ai modifié mon installation Tomcat en 7.072 et que j'ai manuellement modifié la configuration du chemin de contexte en chemin = "", le problème a été résolu dans Eclipse. (Vous pouvez manipuler le chemin via un serveur double-clic et en passant à l'onglet du module également.)

Mon émerveillement est de savoir pourquoi IntelliJ ne posait pas de problèmes avec le même bogue qui était supposé être lié à la version d’installation de Tomcat.

Il semble également exister une relation avec le IDE utilisé.

0
Ozan Aksoy