web-dev-qa-db-fra.com

Erreur Java: seul un type peut être importé. XYZ résout un paquet

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

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;" %>
33
Ankur

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.

60
Pascal Thivent

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.

7
gmcgath

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

3
Andreas_D

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. 

2
Gullbyrd

Je l'ai résolu en ajoutant les pots dans le répertoire Tomcat lib.

2
Pratik Gaurav

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?

1
jediz

Pour moi, c'était un mauvais déploiement. Bien déployé, tout fonctionne (vérifiez ma question pour plus de détails).

1
parsecer

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

1
optimystery

générer un fichier .class séparé et le coller dans le package approprié dans l'espace de travail . Rafraîchir le projet.

1
Karan Rajput

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)

0
Zybrion

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

0
Cocu_1012

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.

0
H.Rabiee

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

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.

0
Nic Cottrell

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é ..."

0
Alessandro Marini

Je l'ai résolu en ajoutant le fichier jar contenant les classes importées dans WEB-INF/Lib

0
Abdellah Benrebea

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?

0
jrdngrnbrg

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

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. 

0
yurin

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.

0
Graham P Heath