webentwicklung-frage-antwort-db.com.de

Java-Fehler: Nur ein Typ kann importiert werden. XYZ löst sich in ein Paket auf

Ich erhalte die Fehlermeldung: "Nur ein Typ kann importiert werden. XYZ wird in ein Paket aufgelöst."

Jemand hat die Ursache hier erklärt, aber ich bin mir nicht sicher, was ich tun soll, um das zu beheben. Zu Ihrer Information: Ich benutze Eclipse. Ich habe den Code hinzugefügt, der unten importiert wird. Der Import von Java.util. * Funktioniert einwandfrei.

 <%@ 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: Der eigentliche Fehler ist unten:

 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, ich habe es gerade gelöst. Beim letzten Import habe ich ein ";" durch Kopieren anderer Codebeispiele. Ich denke, es ist das Standardzeilenende, das benötigt wird.

So

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

wurden

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

Nun, Sie geben nicht wirklich genug Details in Ihrer WebApp an, aber ich vermute, dass Sie eine JSP mit etwas wie dem haben:

<%@ page import="Java.util.*,x.y.Z"%> 

x.y.Z kann nicht im Klassenpfad gefunden werden (d. H. Ist weder unter WEB-INF/classes noch in einem JAR von WEB-INF/lib vorhanden).

Überprüfen Sie nochmals, ob die auf Tomcat bereitgestellte WAR die folgende Struktur aufweist:

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

Oder dass die JAR, die x.y.Z.class bündelt, unter WEB-INF/lib vorhanden ist.

60
Pascal Thivent

Wenn Sie den Klassennamen falsch buchstabieren oder sich die Klasse nicht im Klassenpfad befindet, sagt der JSP-Prozessor, dass er "in ein Paket aufgelöst wird", anstatt dass er nicht existiert. Das hat mich heute verrückt gemacht, da ich keinen Tippfehler gesehen hatte, den ich gemacht hatte.

7
gmcgath

Ohne weitere Details klingt dies nach einem Fehler in der Importdeklaration einer Klasse. Prüfen Sie, ob alle Importdeklarationen entweder alle Klassen eines Pakets oder eine einzelne Klasse importieren:

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

Bearbeiten

OK, nach der Bearbeitung sieht es so aus, als wäre es ein JSP-Problem. 

Edit 2

Hier ist ein weiterer Forumseintrag , das Problem scheint Ähnlichkeiten zu haben und das Opfer hat es durch die Neuinstallation von Eclipse gelöst. Ich würde es zuerst versuchen - eine zweite Instanz von Eclipse mit nur den wichtigsten Plugins installieren, einem neuen Arbeitsbereich, dem Projekt, das in diesen sauberen Arbeitsbereich importiert wurde, und auf das Beste hoffen ...

3
Andreas_D

Ich habe diesen Fehler in Netbeans erhalten. Wie bei den meisten bizarren Fehlern dieser Art, die aus dem Nichts auftauchen, löse ich sie auf, indem ich zu den Eigenschaften projiziere, das Quell-/Binärformat (egal zu welchem, nur etwas anderes) ändere und einen Clean-and-Build mache. 

2
Gullbyrd

Ich habe es gelöst, indem ich die Gläser im Tomcat-Verzeichnis lib hinzugefügt habe.

2
Pratik Gaurav

Ich habe auch diesen seltsamen Fehler erfahren, nachdem ich den Buchstaben einer Klasse geändert habe. Die Datei wurde nicht wie erwartet auf einen Tomcat-Server kopiert. Ich musste sie manuell löschen und erneut implementieren. Möglicherweise, weil ich Betriebssystem ohne Berücksichtigung der Groß- und Kleinschreibung verwende?

1
jediz

Für mich war es ein falscher Einsatz. Richtig eingesetzt, funktioniert alles (check meine Frage für Details).

1
parsecer

Ich weiß, es ist zu spät, um auf diesen Beitrag zu antworten, aber da ich keine klare Antwort sehe, würde ich es trotzdem tun ...

vielleicht möchten Sie den MANIFEST.MF in META-INF auf Ihrem Eclipse überprüfen.

dann müssen Sie möglicherweise den Pfad Ihrer Klassendateien hinzufügen.

Class-Path: WEB-INF/classes

1
optimystery

generieren Sie die .class-Datei separat und fügen Sie sie in das entsprechende Paket in den Arbeitsbereich ein. _ Aktualisieren Sie das Projekt.

1
Karan Rajput

Ich hatte also das gleiche Problem und wollte nur meine Lösung geben. Vielleicht hat jemand das gleiche Problem.

Ich hatte mein Artefakt richtig konfiguriert, aber irgendwie hat intellij etwas gemischt und den WEB-INF-Ordner in einem meiner Artefakte gelöscht.

Beim Anzeigen des Inhalts meiner WAR-Datei war jede Klasse in der richtigen Ordnerstruktur vorhanden. Ich glaubte also nicht, dass irgendetwas fehlte. Als ich jedoch die Artefakte in Intellij überprüfte und mit einem funktionierenden Artefakt verglich, stellte ich fest, dass der WEB-INF-Ordner mit den Klassen und Bibliotheken nicht vorhanden war.

Fügen Sie sie dem Artefakt hinzu und es sollte funktionieren.

TLDR: Intellij hat den WEB-INF-Ordner in meinem .war-Artefakt gelöscht. Überprüfen Sie einfach, ob auch Ihre fehlt. (Projektstruktur -> Artefakte)

0
Zybrion

Mein Beitrag: Ich habe diese Fehlermeldung erhalten, weil ich ein Paket mit dem Namen 3lp ..__ erstellt habe. Laut Java-Spezifikation dürfen Sie Ihr Paket jedoch nicht mit einer Nummer benennen. Ich habe es in _3lp geändert, jetzt funktioniert es .

0
Cocu_1012

Wenn Sie Maven verwenden und Ihre Java-Klassen als JAR-Paket packen, stellen Sie sicher, dass JAR auf dem neuesten Stand ist. Vorausgesetzt, dass JAR natürlich in Ihrem Klassenpfad ist.

0
H.Rabiee

Ich hatte ein ähnliches Problem. In Eclipse habe ich mein Projekt mit einem Beispielprojekt verglichen, das gut funktioniert (erzeugt durch einen Maven-Archetyp). Ich habe festgestellt, dass mein Projekt 2 Zeilen in der Datei /.classpath verfehlt hat. Ich habe diese 2 Zeilen kopiert und das Problem behoben. Obwohl ich in den Projekteinstellungen den Erstellungspfad festgelegt habe, wurde Eclipse aus bestimmten Gründen nicht entsprechend aktualisiert.

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

Ich wette, dass Sie ein Paket namens org.ivec.eresearch.knowledgeportal.model. category (small c) haben und auf einem nicht sensiblen Dateisystem wie Windows oder Mac laufen. Es scheint, dass der Compiler verwirrt wird, wenn eine Klasse und ein Paket vorhanden sind.

Sie können entweder die Klasse "Kategorie" oder das Paket "Kategorie" umbenennen, und dieser Fehler wird behoben. Leider bin ich nicht sicher, ob es sich um einen Tomcat- oder EuGH-Fehler handelt.

0
Nic Cottrell

Dies geschieht normalerweise beim Mischen (auf derselben JSP-Seite) des statischen Jsp-Imports:

<%@include file="...

mit dynamischem jsp import:

<jsp:include page="...

und Ihr Typ wurde bereits vom "statisch importierten" Jsp importiert. Wenn derselbe Typ vom "dynamisch importierten" jsp verwendet (und anschließend importiert) werden soll -> generiert dies die Ausnahme: "Nur ein Typ kann importiert werden ..."

0

Ich löste es, indem ich die JAR-Datei mit den importierten Klassen in WEB-INF/Lib hinzufügte. 

0

Sie müssen etwas aus dem Paket importieren, beispielsweise eine Klasse, ein Enum oder ein Interface, wie folgt:

import some.package.SomeClass;

oder importiere alles aus dem Paket (nicht empfohlen)

import some.package.*;

edit: vielleicht habe ich nicht nahe genug gelesen. Wo befindet sich das Paket, aus dem Sie importieren möchten, im Dateisystem? Ist es unter WEB-INF/lib?

0
jrdngrnbrg

Gibt es mehr Details? (Ist dies in einer JSP wie auf der verlinkten Webseite?)

In diesem Fall können Sie immer den vollständig qualifizierten Klassennamen verwenden.
eher, als: 

import foo.bar.*;
Baz myBaz;

sie können verwenden

foo.bar.Baz myBaz;
0

Diese Ausnahme habe ich auch bekommen.

Umgebung: Mac mit Eclipse, auf dem Tomcat in Eclipse mit der Serveransicht ausgeführt wird. 

Aus irgendeinem Grund kopiert Eclipse den classes-Ordner nicht nach WEB-INF. Nachdem der classes-Ordner manuell kopiert wurde, funktioniert alles einwandfrei. 

Weiß nicht, oder es ist Eclipse-Bug oder ich habe etwas verpasst. 

0
yurin

Versuchen Sie, eine überschriebene Klasse wie ich zu importieren?

Ist dies der Fall, befindet sich Ihre überschriebene Klasse im falschen Paket oder ist nicht vorhanden.

Das Erstellen oder Verschieben der Klasse an der richtigen Stelle (src/[package.package]. [Class]) könnte Ihr Problem lösen.

0
Graham P Heath