Ich arbeite an einer einfachen JSP / Servlet / Tomcat-Webanwendung für meine Klasse. Der Professor bat uns, eine Ordnerstruktur zu verwenden, die sich geringfügig von der dynamischen Standard-Webprojektstruktur unterscheidet. Anstatt den Ordner webcontent zu verwenden, möchte er unseren gesamten Quellcode unter src / main / java und src / main / webapp.
Wenn ich die App starte, wird meine Begrüßungsdatei einwandfrei angezeigt. Wenn ich jedoch versuche, auf meine Servlets zuzugreifen, wird Folgendes angezeigt:
Http 500 SEVERE: Allocate exception for servlet InitDb
java.lang.ClassNotFoundException. Ich bin mir ziemlich sicher, dass es sich um einen Build-Pfad-Fehler handelt. Ich habe final / src auf dem Erstellungspfad, erhalte aber die Warnung
"Cannot nest 'final/src/main/webapp/WEB-INF/classes' inside 'final/src'. To enable the nesting exclude 'main/' from 'final/src'
Ich habe dies in meiner Bereitstellungsassembly:
<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
Wenn ich main / ausschließe, verschwindet die Warnung, aber das Problem wird dadurch nicht behoben. Ich würde mich über jeden Rat freuen. Vielen Dank.
Ich wollte eine nicht-mavenische Antwort auf diesen Thread geben.
Aufgrund der Versionskontrolle und strenger Gründe für die Verzeichnisstruktur konnte ich Acherons Antwort (die beste Antwort) nicht folgen, etwas Ähnliches wie Entfernen
src/
und Hinzufügensrc/main/java
undsrc/test/java
zum Erstellungspfad zu tun .Ich hatte tatsächlich ein paar Wochen lang immer wieder gegen dieses Problem mit verschachtelten Build-Pfaden gekämpft. Die Antwort auf das Problem ist in der Fehlermeldung angegeben:
To enable the nesting exclude 'main/' from 'final/src'
Fix
In Ihrem Erstellungspfad müssen Sie Ihren bearbeiten,
Inclusion and Exclusion Patterns
indem Sie aufExcluded: (None)
und dann klickenEdit...
:Dort können Sie
main/webapp/WEB-INF/classes
als hinzufügenExclusion Pattern
. Anschließend sollten Siemain/webapp/WEB-INF/classes
dem Erstellungspfad einen separaten Quellordner hinzufügen können .quelle
Versuche dies:
Auf der Registerkarte Bibliotheken:
Entfernen Sie Ihre Web-App-Bibliotheken:
Fügen Sie sie wieder hinzu in:
Hervorheben von "Web App Libraries":
quelle
Ich hatte das gleiche Problem und die richtige Antwort oben hat bei mir nicht funktioniert. Um das Problem zu beheben, habe
Build Path->Configure Build Path
ich alle Quellen (die nur eine Quelle hatten) entfernt und unter der Registerkarte "Quelle" entfernt und von dort aus neu konfiguriert. Am Ende habe ich das Projekt aus Eclipse entfernt und das Maven-Projekt erneut importiert, um den Fehler zu beheben.quelle
In meinem Fall habe ich ein Gradle-Natur-Projekt in Eclipse , das Problem war in a
build.gradle
, wo diessourceSets
angegeben ist:Das scheint gut funktioniert mit IntelliJ , scheint jedoch als Eclipse nicht wie Nest
src
,src/java
,src/resources
. In Eclipse muss ich es ändern in:quelle
Sie müssen Ihre Quellen und Ihr Zielverzeichnis trennen, in das die Build-Ausgabe verschoben wird. Es ist auch wichtig zu beachten, dass keine Klassendateien jemals im Quellverzeichnis landen können. Dies ist nicht gegen den Rat Ihres Professors - tatsächlich fördert er die Standard-Quellstruktur von Maven für ./src/main/java und ./src/main/webapp. Der zweite sollte zB halten. die obligatorische Datei WEB-INF / web.xml, aber Sie werden dort niemals tatsächliche Klassen ablegen.
Was Sie ändern müssen, ist Ihr Zielverzeichnis. Ich schlage vor, die gleichen Standards zu verwenden und dafür den Namen "./target" zu wählen. Alle erstellten Dateien werden hier gespeichert, und das Packen führt zu einem korrekten bereitstellbaren Artefakt. Wenn Sie später auf die Verwendung von maven migrieren, hilft dies auch dabei, dies in einer skriptbasierten, wiederholbaren Weise zu tun.
Hoffe, das klärt dein Problem.
quelle
Hier ist eine einfache Lösung:
quelle
Die akzeptierte Lösung hat bei mir nicht funktioniert, aber ich habe einige Projekteinstellungen vorgenommen.
Die folgende Lösung hat es zumindest für mich behoben, wenn Sie ein dynamisches Webprojekt verwenden:
Sie sollten in der Lage sein, src / main / java hinzuzufügen. Außerdem wird es automatisch zur Bereitstellungsassembly hinzugefügt.
Vorsichtsmaßnahme: Wenn Sie eine src / test / java-Notiz hinzugefügt haben, wird diese auch zur Deployment Assembly hinzugefügt. Im Allgemeinen brauchen Sie das nicht. Sie können es entfernen.
quelle
Dies führte mich in ein riesiges Kaninchenloch, in dem Störungen mit Eclipse behoben wurden. Ich habe das Projekt jedoch gerade aus Eclipse gelöscht und es erneut importiert, um es zu beheben.
quelle
Damit der Eclipse-Compiler ordnungsgemäß funktioniert, müssen Sie final / src aus dem Quellpfad entfernen und stattdessen final / src / main / java hinzufügen. Dies kann auch Ihr Problem lösen, da sich das Build-Verzeichnis jetzt nicht mehr im Java-Quellordner befindet.
quelle
Es hängt davon ab, zu welchem Ordner man "Als Quellordner verwenden" sagt. Wenn man es in der Struktur auf dem Bild zum Ordner "Ziel" oder "Erzeugt" sagt, erhält man den Fehler "verschachtelt". Aber auf dem Ordner "cxf", der der letzte ist, der im Abschnitt "Plugin" der pom.xml erwähnt wird und wo die Paketstruktur beginnt (wie in der .wsdl-Datei gezeigt), dh - der richtige Ordner, um dies zu tun, "Quell" , dann liegt kein Fehler vor
quelle
Habe ein ähnliches Problem. Wurden folgende Schritte ausgeführt, Problem behoben:
quelle
Erstellen Sie zwei Ordner:
final/src/
zum Speichern des Java-Quellcodes undfinal/WebRoot/
.Sie können die Quelle und die Webroot nicht zusammenfügen. Ich denke, Sie könnten Ihren Lehrer falsch verstehen.
quelle