Erreur Java: Seul un type peut être importé. XYZ résout un package

J’obtiens l’erreur: “Seul un type peut être importé. XYZ se résout en un package.”

Quelqu’un a expliqué la cause ici, mais je ne suis pas sûr de ce que je devais faire pour résoudre ce problème. FYI: J’utilise Eclipse. J’ai ajouté le code qui fait l’importation ci-dessous. Le fichier java.util. * Fonctionne correctement.

   <% CategoryDao catDao = new CategoryDao(); ArrayList catList = catDao.selectCategory(); // %> 

Edit: l’erreur réelle est ci-dessous:

  org.apache.jasper.JasperException: Unable to comstack class for JSP: An error occurred at line: 7 in the generated java file Only a type can be imported. org.eresearch.knowledgeportal.model.Category resolves to a package 

Eh bien, vous ne fournissez pas suffisamment de détails sur votre application Web, mais je pense que vous avez un JSP avec quelque chose comme ça:

 <%@ page import="java.util.*,xyZ"%> 

Et xyZ ne peut pas être trouvé sur le classpath (c’est-à-dire qu’il n’est pas présent dans WEB-INF/classes ni dans un JAR de WEB-INF/lib ).

Vérifiez que le fichier WAR déployé sur Tomcat a la structure suivante:

 my-webapp |-- META-INF | `-- MANIFEST.MF |-- WEB-INF | |-- classes | | |-- x | | | `-- y | | | `-- Z.class | | `-- another | | `-- packagename | | `-- AnotherClass.class | |-- lib | | |-- ajar.jar | | |-- bjar.jar | | `-- zjar.jar | `-- web.xml |-- a.jsp |-- b.jsp `-- index.jsp 

Ou que le JAR qui regroupe xyZclass est présent sous WEB-INF/lib .

OK je viens de le résoudre. Lors de la dernière importation, j’ai ajouté un “;” en copiant d’autres exemples de code. Je suppose que c’est la fin de ligne standard qui est requirejse.

Alors

 <%@ page import="java.util.*" %> <%@ page import="org.eresearch.knowledgeportal.dao.CategoryDao" %> <%@ page import="org.eresearch.knowledgeportal.model.Category" %> 

devenu

  <%@ page import="java.util.*" %> <%@ page import="org.eresearch.knowledgeportal.dao.CategoryDao" %> <%@ page import="org.eresearch.knowledgeportal.model.Category;" %> 

Si vous épelez le nom de classe incorrect ou si la classe n’est pas sur le chemin de classe, le processeur JSP dira qu’il “résout un paquet” plutôt que de ne pas exister. Cela me rendait folle aujourd’hui car je ne voyais plus une faute de frappe.

Sans plus de détails, cela ressemble à une erreur dans la déclaration d’importation d’une classe. Vérifiez si toutes les déclarations d’importation importent toutes les classes d’un package ou d’une seule classe:

 import all.classes.from.package.*; import only.one.type.named.MyClass; 

modifier

OK, après l’édition, on dirait qu’il s’agit d’un problème de jsp.

Modifier 2

Voici une autre entrée du forum , le problème semble avoir des similitudes et la victime l’a résolu en réinstallant l’éclipse. J’essaierais celui-là en premier – installer une seconde instance d’eclipse avec seulement les plugins les plus nécessaires, un nouvel espace de travail, le projet importé dans cet espace de travail propre et espérer le meilleur …

J’ai eu cette erreur dans Netbeans. Comme pour la plupart des erreurs bizarres comme celle-ci qui apparaissent de nulle part, je résous le problème en allant dans les propriétés du projet, en changeant le format source / binary (peu importe quoi, juste quelque chose de différent) et en nettoyant.

Je l’ai résolu en ajoutant les jars dans le répertoire tomcat lib.

J’ai aussi connu cette erreur étrange après avoir changé la casse des lettres au nom d’une classe. Le fichier n’a pas été copié sur un serveur Tomcat comme prévu, je devais le supprimer manuellement et le redéployer. Peut-être parce que j’utilise un système d’exploitation insensible à la casse?

Je sais que c’est un peu tard pour répondre à cet article mais comme je ne vois pas de réponse claire, je le ferais quand même …

vous pourriez vouloir vérifier le MANIFEST.MF dans META-INF sur votre éclipse.

alors vous devrez peut-être append le chemin de vos fichiers de classe comme ..

Class-Path: WEB-INF/classes

générer le fichier .class séparément et le coller dans le package approprié dans l’espace de travail. Actualiser le projet.

Pour moi, c’était un mauvais déploiement. Déployé correctement, tout fonctionne (consultez ma question pour plus de détails).

Vous devez importer quelque chose du package, comme une classe, une énumération ou une interface, comme ceci:

 import some.package.SomeClass; 

ou, tout importer du paquet (non recommandé)

 import some.package.*; 

edit: peut-être que je n’ai pas lu assez près. D’où vient le paquet que vous essayez d’importer depuis le système de fichiers? Est-ce sous WEB-INF / lib?

Y a-t-il plus de détails? (Est-ce dans une JSP comme dans la page Web liée?)

Si oui, vous pouvez toujours utiliser le nom de classe complet.
plutôt que:

 import foo.bar.*; Baz myBaz; 

vous pouvez utiliser

 foo.bar.Baz myBaz; 

J’ai eu un problème similaire. Dans eclipse, j’ai comparé mon projet avec un exemple de projet qui fonctionne bien (généré par un archétype Maven). J’ai trouvé que mon projet avait raté 2 lignes dans le fichier /.classpath. J’ai copié ces 2 lignes et le problème a été résolu. Il semble que même si je mets le chemin de la construction dans les préférences du projet, eclipse n’a pas été mis à jour pour certaines raisons.

     ...  

Ma consortingbution: J’ai eu cette erreur car j’ai créé un paquet nommé 3lp. Cependant, selon les spécifications java, vous n’êtes pas autorisé à nommer votre paquet en commençant par un numéro. Je l’ai changé en _3lp, maintenant ça marche.

Mon pari est que vous avez un paquet appelé org.ivec.eresearch.knowledgeportal.model. catégorie (petit c ) et s’exécutent sur un système de fichiers non sensible à la casse comme Windows ou Mac. Il semble que le compilateur soit confus quand une classe et un paquet existent.

Vous pouvez renommer la classe “Catégorie” ou le package “catégorie” et cette erreur disparaîtra. Malheureusement, je ne suis pas sûr que ce soit un bug Tomcat ou ECJ.

Si vous utilisez Maven et que vous regroupez vos classes Java en tant que JAR, assurez-vous que JAR est à jour. En supposant toujours que JAR est dans votre chemin de classe, bien sûr.

Je l’ai résolu en ajoutant le fichier jar contenant les classes imscopes dans WEB-INF/Lib .

Essayez-vous d’importer une classe surchargée comme je l’étais?

Si oui, votre classe remplacée est dans le mauvais package, ou simplement inexistante.

Créer ou déplacer la classe vers le bon emplacement (src / [package.package]. [Class]) pourrait résoudre votre problème.

Cela se produit généralement lors du mixage (dans la même page jsp) de l’importation statique jsp:

 <%@include file="... 

avec import jsp dynamic:

  importé dynamicment, cela génère une exception: "Seul un type peut être importé ..." 

J’ai eu le même message d’erreur et ma façon de le gérer est la suivante:

  1. Allez d’abord dans le répertoire de fichiers où votre Tomcat publie votre application Web, par exemple D: \ Java \ workspace.metadata.plugins \ org.eclipse.wst.server.core \ tmp1 \ wtpwebapps \ myDatatable \ WEB-INF \ classes, dans que nous mettons normalement nos classes. Si ce n’est pas l’endroit où vous mettez vos classes, alors vous devez trouver par défaut le bouton droit de la souris sur votre application web -> Build Path -> Configure Build Bath …–> l’onglet “Source” et recherchez la valeur du champ “Dossier de sortie par défaut”. Ce sera l’endroit où Tomcat a mis vos cours.
  2. Vous verriez que la classe XYZ n’est pas encore construite. Pour le construire, vous pouvez aller dans le menu “Projet” -> “Nettoyer …” -> Sélectionnez votre application Web à nettoyer.
  3. Une fois terminé, essayez de redémarrer votre serveur Tomcat et vérifiez à nouveau le répertoire de fichiers. Votre classe devrait être là. Au moins ça marche pour moi. J’espère que cela aide.