Ich erhalte die Fehlermeldung: "Es kann nur ein Typ importiert werden. XYZ wird in ein Paket aufgelöst."
Jemand hat hier die Ursache erklärt , aber ich bin mir nicht sicher, was ich tun soll, um dies zu beheben. Zu Ihrer Information: Ich benutze Eclipse. Ich habe den Code hinzugefügt, der den Import unten ausführt. 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();
//
%>
Bearbeiten: 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
Antworten:
Nun, Sie geben nicht wirklich genug Details in Ihrer Webanwendung an, aber ich vermute, dass Sie eine JSP mit so etwas haben:
<%@ page import="java.util.*,x.y.Z"%>
Und
x.y.Z
kann nicht auf dem Klassenpfad gefunden werden (dh ist weder unterWEB-INF/classes
noch in einem JAR von vorhandenWEB-INF/lib
).Stellen Sie sicher, dass das auf Tomcat bereitgestellte WAR die folgende Struktur aufweist:
Oder dass die JAR, die gebündelt
x.y.Z.class
wird, unter vorhanden istWEB-INF/lib
.quelle
package
eine illegaleOK, ich habe es gerade gelöst. Beim letzten Import habe ich ein ";" durch Kopieren anderer Codebeispiele. Ich denke, es ist das Standardzeilenende, das erforderlich ist.
Damit
<%@ 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;" %>
quelle
Wenn Sie den Klassennamen falsch buchstabieren oder sich die Klasse nicht im Klassenpfad befindet, sagt der JSP-Prozessor, dass sie "in ein Paket aufgelöst" wird, anstatt dass sie nicht vorhanden ist. Das machte mich heute verrückt, da ich immer wieder keinen Tippfehler sah, den ich gemacht hatte.
quelle
Ich habe diesen Fehler in Netbeans erhalten. Wie bei den meisten bizarren Fehlern wie diesem, die aus dem Nichts auftreten, löse ich sie, indem ich zu den Projekteigenschaften gehe, das Quell- / Binärformat ändere (egal was, nur etwas anderes) und eine Bereinigung und Erstellung durchführe.
quelle
Ohne weitere Details klingt es wie ein Fehler in der Importdeklaration einer Klasse. Überprüfen Sie, ob alle Importdeklarationen entweder alle Klassen aus einem Paket oder einer einzelnen 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.
Bearbeiten 2
Hier ist ein weiterer Foreneintrag , das Problem scheint Ähnlichkeiten zu haben und das Opfer hat es durch die Neuinstallation von Eclipse gelöst. Ich würde das zuerst versuchen - eine zweite Instanz von Eclipse mit nur den notwendigsten Plugins, einem neuen Arbeitsbereich, dem in diesen sauberen Arbeitsbereich importierten Projekt installieren und auf das Beste hoffen ...
quelle
Ich habe es durch Hinzufügen der Gläser im Tomcat Lib-Verzeichnis gelöst.
quelle
Habe auch diese Ausnahme.
Umgebung: Mac mit Eclipse, auf dem Tomcat in Eclipse mithilfe der Serveransicht ausgeführt wird.
Aus irgendeinem Grund kopiert Eclipse keinen
classes
Ordner inWEB-INF
. Nachdem derclasses
Ordner manuell kopiert wurde, funktioniert alles einwandfrei.Weiß nicht, oder es ist ein Eclipse-Fehler oder ich habe etwas verpasst.
quelle
Ich habe diesen seltsamen Fehler auch erlebt, nachdem ich die Groß- und Kleinschreibung im Namen einer Klasse geändert hatte. Die Datei wurde nicht wie erwartet auf einen Tomcat-Server kopiert. Ich musste sie manuell löschen und erneut bereitstellen. Vielleicht, weil ich ein Betriebssystem verwende, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird?
quelle
Ich weiß, dass es etwas zu spät ist, um auf diesen Beitrag zu antworten, aber da ich keine klare Antwort sehe, würde ich es trotzdem tun ...
Vielleicht möchten Sie das
MANIFEST.MF
InMETA-INF
Ihrer Sonnenfinsternis überprüfen .Dann müssen Sie möglicherweise den Pfad Ihrer Klassendateien wie ... hinzufügen.
Class-Path: WEB-INF/classes
quelle
Generieren Sie eine separate Klassendatei und fügen Sie sie in das entsprechende Paket in den Arbeitsbereich ein. Projekt aktualisieren.
quelle
Für mich war es ein falscher Einsatz. Bei ordnungsgemäßer Bereitstellung funktioniert alles (siehe meine Frage für Details).
quelle
Sie müssen etwas aus dem Paket importieren, z. B. eine Klasse, eine Aufzählung oder eine Schnittstelle, wie folgt:
import some.package.SomeClass;
oder importieren Sie alles aus dem Paket (nicht empfohlen)
import some.package.*;
edit: vielleicht habe ich nicht nah genug gelesen. Wo befindet sich das Paket, von dem Sie importieren möchten, im Dateisystem? Ist es unter WEB-INF / lib?
quelle
Gibt es mehr Details? (Ist dies in einer JSP wie auf der verlinkten Webseite?)
In diesem Fall können Sie immer nur den vollständig qualifizierten Klassennamen verwenden.
eher, als:
import foo.bar.*; Baz myBaz;
Sie können verwenden
quelle
Ich hatte ein ähnliches Problem. In Eclipse habe ich mein Projekt mit einem Beispielprojekt verglichen, das einwandfrei funktioniert (generiert von einem Maven-Archetyp). Ich habe festgestellt, dass in meinem Projekt 2 Zeilen in der Datei /.classpath fehlen. Ich habe diese 2 Zeilen kopiert und das Problem behoben. Obwohl ich den Erstellungspfad in den Projekteinstellungen 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>
quelle
Mein Beitrag: Ich habe diesen Fehler erhalten, weil ich ein Paket mit dem Namen 3lp erstellt habe. Laut Java-Spezifikation dürfen Sie Ihr Paket jedoch nicht mit einer Nummer beginnen. Ich habe es in _3lp geändert, jetzt funktioniert es.
quelle
Ich wette, Sie haben ein Paket namens org.ivec.eresearch.knowledgeportal.model. Kategorie (klein
c
) und laufen auf einem Dateisystem ohne Berücksichtigung der Groß- und Kleinschreibung wie Windows oder Mac. Es scheint, dass der Compiler verwirrt ist, wenn eine Klasse und ein Paket existieren.Sie können entweder die Klasse "Kategorie" oder das Paket "Kategorie" umbenennen, und dieser Fehler wird behoben. Leider bin ich mir nicht sicher, ob dies ein Tomcat- oder ein EuGH-Fehler ist.
quelle
Wenn Sie Maven verwenden und Ihre Java-Klassen als JAR verpacken, stellen Sie sicher, dass JAR auf dem neuesten Stand ist. Ich gehe natürlich immer noch davon aus, dass JAR in Ihrem Klassenpfad ist.
quelle
Ich habe es behoben, indem ich die JAR-Datei hinzugefügt habe, die die importierten Klassen enthält
WEB-INF/Lib
.quelle
Versuchen Sie, eine überschriebene Klasse wie ich zu importieren?
In diesem Fall befindet sich Ihre überschriebene Klasse im falschen Paket oder ist einfach nicht vorhanden.
Das Erstellen oder Verschieben der Klasse an den richtigen Speicherort (src / [package.package]. [Class]) könnte Ihr Problem lösen.
quelle
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 von der "statisch importierten" JSP importiert. Wenn derselbe Typ vom "dynamisch importierten" JSP verwendet (und dann importiert) werden muss -> wird die Ausnahme generiert: "Es kann nur ein Typ importiert werden ..."
quelle
Also hatte ich das gleiche Problem und wollte nur meine Lösung geben. Vielleicht steht jemand vor dem gleichen Problem.
Ich hatte mein Artefakt richtig konfiguriert, aber irgendwie hat Intellij etwas durcheinander gebracht und den WEB-INF-Ordner in einem meiner Artefakte gelöscht.
Als ich den Inhalt meiner .war-Datei betrachtete, war jede Klasse in der richtigen Ordnerstruktur vorhanden. Also habe ich nicht gedacht, dass etwas fehlt. Als ich jedoch die Artefakte in Intellij überprüfte und mit einem funktionierenden Artefakt verglich, stellte ich fest, dass der Ordner WEB-INF 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)
quelle
Die Tomcat-Ordnerstruktur enthält Webapps / ROOT /, in dem der WEB-INF-Ordner vorhanden sein muss. Wenn Sie Ihre WEB-INF in Webapps / Tomcat platzieren, werden die Klassendateien und Jars nicht gefunden.
quelle
Fügen Sie einfach einen weiteren Weg hinzu, um diesen seltsamen Fehler zu erreichen
Mir ist passiert, dass die
classpath
ein paar Gläser von Tomcat mit derTOMCAT_HOME
Variablen hatten.Ich hatte diese Variable nicht festgelegt und brauchte sie seit über einem Jahr in meinem aktuellen Job nie mehr. Aber dieses spezielle Projekt erwartete diese Variable in der
classpath
und Eclipse würde mir nicht sagen, dass einclasspath
Fehler aufgetreten ist.quelle
Ich habe den gleichen Fehler erhalten und nichts war falsch mit meinen Java-Dateien und -Paketen. Später bemerkte ich, dass der Ordnername WEB-INF wie folgt geschrieben war: "WEB_INF". Das Korrigieren nur des Ordnernamens löste das Problem
quelle
Ich hatte das gleiche Problem, als ich von Eclipse aus lief. Um das Problem zu beheben, ging ich in den Build-Pfad konfigurieren und entfernte den Ordner src aus dem Build-Pfad. Dann geschlossen und das Projekt wieder geöffnet. Dann habe ich den Ordner src zum Erstellungspfad hinzugefügt. Der src-Ordner enthielt die Java-Klasse, auf die ich zugreifen wollte.
quelle
Ich hatte die gleiche Fehlermeldung und gehe wie folgt damit um:
quelle