wake-up-neo.com

Eclipse Build Path Nesting-Fehler

Ich arbeite an einer einfachen JSP/Servlet/Tomcat-Webapp für meine Klasse. Der Professor bat uns, eine Ordnerstruktur zu verwenden, die sich geringfügig von der standardmäßigen dynamischen Webprojektstruktur unterscheidet. Statt den Ordner webcontent zu verwenden, möchte er den gesamten Quellcode unter src/main/Java und src/main/webapp verwenden.

Wenn ich die App starte, wird meine Begrüßungsdatei angezeigt. Wenn ich jedoch auf meine Servlets zugreifen möchte, erhalte ich Folgendes:

 Http 500 SEVERE: Allocate exception for servlet InitDb

Java.lang.ClassNotFoundException. Ich bin mir ziemlich sicher, dass es ein Fehler beim Build-Pfad ist. Ich habe final/src auf dem Build-Pfad, aber ich erhalte die Warnung 

"Cannot nest 'final/src/main/webapp/WEB-INF/classes' inside 'final/src'. To enable the    nesting exclude 'main/' from 'final/src'

enter image description here

Ich habe dies in meiner Deployment Assembly: 

<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/> 

Wenn ich main ausschließe, verschwindet die Warnung, aber das Problem ist nicht behoben. Ich würde mich über einen Rat freuen. Vielen Dank. 

104
CodeNameBrandon

Ich hatte das gleiche Problem, als ich ein neues Projekt erstellte. Ich habe das Java-Projekt in Eclipse erstellt, dann mavenize es erstellt, dann in die Java-Build-Pfadeigenschaften gegangen, src/ entfernt und src/main/Java und src/test/Java hinzugefügt. Beim Ausführen von Maven-Update wurde ein verschachtelter Pfadfehler angegeben. 
Dann wurde mir endlich klar - weil ich diesen Eintrag vorher nicht gesehen hatte- es gibt eine <sourceDirectory>src</sourceDirectory>-Zeile in der pom-Datei, die geschrieben wird, wenn ich es maveniere. Es wurde nach dem Entfernen behoben.

276
acheron55

Ich wollte eine nicht-freche Antwort auf diesen Thread einbringen.

Aus Gründen der Versionskontrolle und der strengen Verzeichnisstruktur konnte ich Acherons Antwort (der besten Antwort) nicht folgen, indem ich etwas ähnliches tat, wie src/ zu entfernen und src/main/Java und src/test/Java zum Buildpfad hinzuzufügen.

Ich hatte tatsächlich ein paar Wochen lang mit diesem Problem des verschachtelten Baupfads gekämpft. Die Antwort auf das Problem finden Sie in der Fehlermeldung:

To enable the nesting exclude 'main/' from 'final/src'

Fix

In Ihrem Build-Pfad müssen Sie Ihren Inclusion and Exclusion Patterns bearbeiten, indem Sie auf Excluded: (None) und dann auf Edit... klicken:

  1. Gehen Sie zum Navigator und klicken Sie mit der rechten Maustaste auf das Projekt
  2. Pfad erstellen
  3. Erstellungspfad konfigurieren
  4. Quelle (Registerkarte)

 Exclusion Patterns

Dort können Sie main/webapp/WEB-INF/classes als Exclusion Pattern hinzufügen. Dann sollte es möglich sein, main/webapp/WEB-INF/classes als separaten Quellordner zum Build-Pfad hinzuzufügen.

17
heez

Versuche dies:

Auf der Registerkarte "Bibliotheken":

Eclipse -> right click on project name in sidebar -> configure build path -> Libraries

Entfernen Sie Ihre Web-App-Bibliotheken:

click on "Web App Libraries" -> click "remove"

Fügen Sie sie zurück in:

click "Add Library" -> click to highlight "Web App Libraries" -> click "next" -> confirm your desired project is the selected option -> click "Finish"

"Web-App-Bibliotheken" hervorheben:

Highlighting "Web App Libraries"

10

Ich hatte das gleiche Problem und die richtige Antwort funktionierte nicht für mich. Was ich tat, um das Problem zu beheben, war, zu Build Path->Configure Build Path zu gehen, und unter der Registerkarte "Quelle" habe ich alle Quellen (die nur eine Quelle hatten) entfernt und von dort neu konfiguriert. Am Ende entfernte ich das Projekt aus Eclipse und importierte das Maven-Projekt erneut, um den Fehler zu beheben.

2
Hatem Jaber

Sie müssen Ihre Quellen und Ihr Zielverzeichnis, in das die Build-Ausgabe geht, voneinander trennen. Es ist auch wichtig zu beachten, dass keine Klassendateien im Quellverzeichnis enden 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 WEB-INF/web.xml-Datei, aber Sie werden niemals tatsächliche Klassen dort ablegen.

Was Sie ändern müssen, ist Ihr Zielverzeichnis. Ich schlage vor, nach den gleichen Standards zu gehen und dafür den Namen "./target" zu wählen. Alle erstellten Dateien werden hier eingefügt, und wenn Sie diese zusammenstellen, erhalten Sie ein korrektes bereitbares Artefakt. Wenn Sie später auf maven umsteigen, hilft dies auch auf geskriptete, wiederholbare Weise.

Hoffe das klärt dein Problem.

2
Kristof Jozsa

Die akzeptierte Lösung hat für mich nicht funktioniert, aber ich habe die Projekteinstellungen etwas durchgearbeitet. 

Die folgende Lösung hat es für mich zumindest behoben, WENN Sie ein dynamisches Webprojekt verwenden:

  1. Klicken Sie mit der rechten Maustaste auf das Projekt und dann auf Eigenschaften. (oder Alt-Eingabe für das Projekt)
  2. Entfernen Sie unter Deployment Assembly "src".

Sie sollten in der Lage sein, src/main/Java hinzuzufügen. Es fügt es automatisch zur Bereitstellungsassembly hinzu.

Vorsichtsmaßnahme: Wenn Sie eine src/test/Java-Notiz hinzugefügt haben, wird sie auch zur Deployment Assembly hinzugefügt. Im Allgemeinen brauchen Sie das nicht. Sie können es entfernen.

1
Chad

In meinem Fall habe ich ein gradle nature Projekt in Eclipse , das Problem war in einem build.gradle, wo diese sourceSets angegeben ist:

sourceSets {
    main {
        Java {
            srcDir 'src'
        }
    }
 }

Dies scheint gut mit intelliJ zu funktionieren, scheint jedoch als Eclipse das Nest src, src/Java, src/resources nicht zu mögen. In Eclipse muss ich es ändern in:

sourceSets {
    main {
        Java {
            srcDir 'src/main/Java'
        }
    }
}
1
albciff

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 das Problem lösen, da sich das Build-Verzeichnis jetzt nicht mehr im Java-Quellordner befindet.

0
Sasha O

Dies führte dazu, dass ich ein riesiges Kaninchenloch mit Eclipse beseitigte, das Problem wurde jedoch von Eclipse gelöscht und neu importiert, um es zu reparieren.

0
Carson

Hier ist eine einfache Lösung:

  1. Klicken Sie mit der rechten Maustaste auf das Projekt >> Eigenschaften >> Erstellungspfad.
  2. Wählen Sie auf der Registerkarte Quelle alle Quellordner aus.
  3. Entferne sie;
  4. Klicken Sie mit der rechten Maustaste auf Projekt, Maven >> Aktualisieren Sie das Projekt.
0
abhijeet104