Je reçois le message d'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 suis censé faire pour résoudre ce problème. FYI: J'utilise Eclipse. J'ai ajouté le code qui fait l'importation ci-dessous. L'importation Java.util. * Fonctionne bien.
<%@ page import="Java.util.*"%>
<%@ page import="org.eresearch.knowledgeportal.model.Category"%>
<%@ page import="org.eresearch.knowledgeportal.dao.CategoryDao"%>
<%
CategoryDao catDao = new CategoryDao();
ArrayList<Category> catList = catDao.selectCategory();
//
%>
Edit: l'erreur réelle est ci-dessous:
org.Apache.jasper.JasperException: Unable to compile 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
OK je viens de le résoudre. Dans 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 requise.
Alors
<%@ page import="Java.util.*" %>
<%@ page import="org.eresearch.knowledgeportal.dao.CategoryDao" %>
<%@ page import="org.eresearch.knowledgeportal.model.Category" %>
est devenu
<%@ page import="Java.util.*" %>
<%@ page import="org.eresearch.knowledgeportal.dao.CategoryDao" %>
<%@ page import="org.eresearch.knowledgeportal.model.Category;" %>
Eh bien, vous ne fournissez pas suffisamment de détails sur votre application Web, mais je suppose que vous avez un JSP avec quelque chose comme ça:
<%@ page import="Java.util.*,x.y.Z"%>
Et x.y.Z
est introuvable sur le chemin d'accès aux classes (c'est-à-dire qu'il n'est pas présent sous WEB-INF/classes
ni dans un fichier JAR de WEB-INF/lib
).
Vérifiez que le WAR que vous déployez 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 fichier JAR qui regroupe x.y.Z.class
est présent sous WEB-INF/lib
.
Si le nom de la classe est mal orthographié ou si la classe ne figure pas sur le chemin de classe, le processeur JSP dit qu'il "résout un paquet" plutôt que qu'il n'existe pas. Cela me rendait folle aujourd'hui, car je ne voyais pas la faute de frappe que j'avais faite.
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 le montage, on dirait que c'est un problème de jsp.
Edit 2
Voici une autre entrée de forum , le problème semble avoir des similitudes et la victime l'a résolu en réinstallant Eclipse. Je commencerais par essayer celle-ci - installer une deuxième instance d'Eclipse avec uniquement les plug-ins les plus nécessaires, un nouvel espace de travail, le projet importé dans cet espace de travail propre et espérer que tout se passe bien ...
J'ai eu cette erreur dans Netbeans. Comme avec la plupart des erreurs bizarres comme celle-ci qui apparaissent de nulle part, je les résout en allant dans les propriétés du projet, en modifiant le format source/binaire (peu importe quoi, juste quelque chose de différent) et en effectuant un nettoyage et une construction.
Je l'ai résolu en ajoutant les pots dans le répertoire Tomcat lib.
J'ai aussi vécu cette erreur bizarre après avoir changé le casse-lettre 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?
Pour moi, c'était un mauvais déploiement. Bien déployé, tout fonctionne (vérifiez ma question pour plus de détails).
Je sais qu'il est un peu trop tard pour répondre à ce message, mais comme je ne vois pas de réponse claire, je le ferais quand même ...
vous voudrez peut-être consulter le MANIFEST.MF
dans META-INF
sur votre Eclipse.
alors vous pourriez avoir besoin d'ajouter le chemin de vos fichiers de classe comme ..
Class-Path: WEB-INF/classes
générer un fichier .class séparé et le coller dans le package approprié dans l'espace de travail . Rafraîchir le projet.
J'ai donc eu le même problème et je voulais juste donner ma solution. Peut-être que quelqu'un fait face au même problème.
J'avais correctement configuré mon artefact mais, d'une manière ou d'une autre, intellij a mélangé quelque chose et supprimé le dossier WEB-INF de l'un de mes artefacts.
Lorsque j'ai visualisé le contenu de mon fichier .war, chaque classe était présente dans la structure de dossiers appropriée. Donc, je ne pensais pas qu'il manquait quelque chose. Mais lorsque j'ai vérifié les artefacts dans Intellij et que je l'ai comparé à un artefact actif, j'ai alors réalisé que le dossier WEB-INF contenant les classes et les bibliothèques n'était pas présent.
Ajoutez-les à l'artefact et cela devrait fonctionner.
TLDR: Intellij a supprimé le dossier WEB-INF de mon artefact .war. Il suffit de vérifier si le vôtre manque également. (Projet Strucutre -> Artefacts)
Ma contribution: j'ai cette erreur parce que j'ai créé un paquet nommé 3lp . Cependant, selon les spécifications Java, vous n'êtes pas autorisé à nommer votre paquet commence par un chiffre . .
Si vous utilisez Maven et personnalisez vos classes Java en tant que JAR, assurez-vous que celui-ci est à jour. Toujours en supposant que JAR se trouve bien sûr dans votre chemin de classe.
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 manquait 2 lignes dans le fichier /.classpath. J'ai copié ces 2 lignes et cela a résolu le problème. Il semble que même si j’ai défini le chemin de construction dans les préférences du projet, Eclipse ne s’est pas mis à jour en conséquence pour certaines raisons.
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="target/classes" path="src/main/Java"/>
<classpathentry kind="src" output="target/test-classes" path="src/test/Java"/>
...
</classpath>
Mon pari est que vous avez un paquet appelé org.ivec.eresearch.knowledgeportal.model. category (small c
) et que vous utilisez un système de fichiers non sensible à la casse, comme Windows ou Mac. Il semble que le compilateur s'embrouille lorsqu'une classe et un package existent.
Vous pouvez renommer la classe "Catégorie" ou le package "catégorie" et cette erreur disparaîtra. Malheureusement, je ne sais pas s'il s'agit d'un bogue Tomcat ou ECJ.
Cela se produit généralement lors du mélange (dans la même page jsp) de l'importation jsp statique:
<%@include file="...
avec import dynamique jsp:
<jsp:include page="...
et votre type a déjà été importé par le fichier jsp "statique importé". Lorsque le même type doit être utilisé (puis importé) par le "importé dynamiquement" jsp ->, cela génère l'exception: "Seul un type peut être importé ..."
Je l'ai résolu en ajoutant le fichier jar contenant les classes importées dans WEB-INF/Lib
.
Vous devez importer quelque chose du paquet, 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. Où se trouve le paquet que vous essayez d'importer sur le système de fichiers? Est-ce sous WEB-INF/lib?
Y a-t-il plus de détails? (Est-ce dans un JSP comme dans la page Web liée?)
Si c'est le cas, vous pouvez toujours utiliser le nom de classe complet.
plutôt que:
import foo.bar.*;
Baz myBaz;
vous pouvez utiliser
foo.bar.Baz myBaz;
Vous avez cette exception aussi.
Environnement: Mac avec Eclipse exécutant Tomcat depuis Eclipse à l’aide de la vue Serveurs.
Pour quelque raison que ce soit, Eclipse ne copie pas le dossier classes
dans WEB-INF
. Une fois que le dossier classes
a été copié manuellement, tout fonctionne correctement.
Je ne sais pas, ou c'est un bug d'Eclipse ou j'ai raté quelque chose.
Est-ce que vous essayez d'importer une classe remplacée comme je l'étais?
Si tel est le cas, votre classe remplacée se trouve dans le mauvais package ou est tout simplement inexistante.
La création ou le déplacement de la classe à l'emplacement correct (src/[package.package]. [[Classe]) pourrait résoudre votre problème.