Błędy zagnieżdżania ścieżki budowania Eclipse

122

Pracuję nad prostą aplikacją internetową JSP / Servlet / Tomcat dla mojej klasy. Profesor poprosił nas o użycie struktury folderów, która jest nieco inna niż domyślna dynamiczna struktura projektu internetowego. Zamiast używać folderu webcontent, chce mieć cały nasz kod źródłowy w src / main / java i src / main / webapp.

Po uruchomieniu aplikacji mój plik powitalny wyświetla się dobrze, ale kiedy próbuję uzyskać dostęp do moich serwletów, otrzymuję:

 Http 500 SEVERE: Allocate exception for servlet InitDb

java.lang.ClassNotFoundException. Jestem prawie pewien, że to błąd ścieżki kompilacji. Mam plik final / src na ścieżce kompilacji, ale otrzymuję ostrzeżenie

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

wprowadź opis obrazu tutaj

Mam to w moim zestawie wdrożeniowym:

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

Kiedy wykluczam main / ostrzeżenie znika, ale nie rozwiązuje problemu. Byłbym wdzięczny za wszelkie wskazówki. Dzięki.

Everhill
źródło

Odpowiedzi:

310

Miałem ten sam problem, nawet gdy tworzyłem nowy projekt. Tworzyłem projekt Java w Eclipse, a następnie modyfikowałem go, a następnie przechodziłem do właściwości ścieżki budowania Java, usuwając src/i dodając src/main/javai src/test/java. Kiedy uruchamiam aktualizację Maven, dawała ona błąd zagnieżdżonej ścieżki.
Wtedy w końcu zdałem sobie sprawę - ponieważ nie widziałem wcześniej tego wpisu - <sourceDirectory>src</sourceDirectory>w pliku pom jest zapisywana linia, kiedy ją zmavenizuję. Problem został rozwiązany po jego usunięciu.

acheron55
źródło
1
To tylko jedna z wielu przypadkowych sztuczek. Nie wyjaśniam dlaczego. Tak więc mniej pomocne.
smwikipedia
4
Właśnie zmieniłem nazwę wpisu pom na scr / main / java i wszystko było dobrze. Dzięki za post acheron55
Beezer
umieściłeś to tam? lub skąd się bierze?
Linia
23

Chciałem wrzucić niemęską odpowiedź na ten wątek.

Ze względu na kontrolę wersji i ścisłą strukturę katalogów nie mogłem zastosować się do odpowiedzi Acherona (najlepszej odpowiedzi), aby zrobić coś podobnego do usuwania src/i dodawania src/main/javaoraz src/test/javado ścieżki budowania.

Właściwie to przez kilka tygodni walczyłem z problemem zagnieżdżonej ścieżki kompilacji. Odpowiedź na problem jest podpowiedziana w komunikacie o błędzie:

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

Naprawić

W swojej ścieżce kompilacji musisz edytować swoją Inclusion and Exclusion Patterns, klikając, Excluded: (None)a następnie Edit...:

  1. Przejdź do nawigatora i kliknij prawym przyciskiem myszy projekt
  2. Buduj ścieżkę
  3. Skonfiguruj ścieżkę kompilacji
  4. Źródło (karta)

Wzorce wykluczeń

Tam możesz dodać main/webapp/WEB-INF/classesjako plik Exclusion Pattern. Następnie powinno umożliwić dodanie main/webapp/WEB-INF/classesdo ścieżki kompilacji jako oddzielnego folderu źródłowego.

heez
źródło
10

Spróbuj tego:

Z zakładki Biblioteki:

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

Usuń biblioteki aplikacji internetowych:

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

Dodaj je z powrotem w:

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

Podświetlanie „Bibliotek aplikacji internetowych”:

Wyróżnianie „Bibliotek aplikacji internetowych”

Sireesh Yarlagadda
źródło
3

Miałem ten sam problem i poprawna odpowiedź powyżej nie działa dla mnie. Aby rozwiązać ten problem, przeszedłem do Build Path->Configure Build Pathzakładki źródła i usunąłem wszystkie źródła (które miały tylko jedno źródło) i ponownie je skonfigurowałem. Skończyło się na usunięciu projektu z Eclipse i ponownym zaimportowaniu projektu maven, aby usunąć błąd.

Hatem Jaber
źródło
3

W moim przypadku mam projekt gradle nature w zaćmieniu , problem był w a build.gradle, gdzie sourceSetsjest to określone:

sourceSets {
    main {
        java {
            srcDir 'src'
        }
    }
 }

Wydaje się to dobrze współpracuje z IntelliJ , jednak wydaje niż zaćmienie nie lubi gniazdo src, src/java, src/resources. W zaćmieniu muszę to zmienić na:

sourceSets {
    main {
        java {
            srcDir 'src/main/java'
        }
    }
}
albciff
źródło
3

Oto proste rozwiązanie:

  1. Kliknij prawym przyciskiem myszy projekt >> właściwości >> ścieżka budowania;
  2. Na karcie Źródło wybierz wszystkie foldery źródłowe;
  3. Usuń ich;
  4. Kliknij prawym przyciskiem myszy projekt, Maven >> Zaktualizuj projekt.
abhijeet104
źródło
2

Musisz oddzielić źródła i katalog docelowy, do którego trafiają dane wyjściowe kompilacji. Należy również zauważyć, że żadne pliki klas nie mogą nigdy znaleźć się w katalogu źródłowym. Nie jest to sprzeczne z radą twojego profesora - w rzeczywistości promuje on standardową strukturę źródłową Mavena, która obejmuje ./src/main/java i ./src/main/webapp. Drugi powinien pomieścić np. obowiązkowy plik WEB-INF / web.xml, ale nigdy nie umieścisz tam rzeczywistych klas.

Musisz zmienić katalog docelowy. Proponuję zachować te same standardy i wybrać w tym celu nazwę „./target”. Wszystkie skompilowane pliki trafią tutaj, a ich spakowanie da poprawny artefakt do wdrożenia. Jeśli później przejdziesz na używanie Mavena, pomoże to również zrobić to w sposób skryptowy, powtarzalny.

Mam nadzieję, że to rozwiąże Twój problem.

Kristof Jozsa
źródło
1

Zaakceptowane rozwiązanie nie zadziałało, ale pogrzebałem w ustawieniach projektu.

Poniższe rozwiązanie rozwiązało problem, przynajmniej JEŚLI używasz dynamicznego projektu internetowego:

  1. Kliknij prawym przyciskiem myszy projekt, a następnie właściwości. (lub alt-enter w projekcie)
  2. W Deployment Assembly usuń „src”.

Powinieneś móc dodać src / main / java. Automatycznie dodaje go również do zestawu wdrożeniowego.

Uwaga: jeśli dodałeś src / test / java, pamiętaj, że dodaje to również do zestawu wdrożeniowego. Zwykle tego nie potrzebujesz. Możesz go usunąć.

Czad
źródło
1

Zaczęło mnie to prowadzić do ogromnej króliczej dziury naprawiania błędów za pomocą Eclipse, jednak właśnie usunąłem projekt z Eclipse i ponownie zaimportowałem go, aby to naprawić.

Carson
źródło
0

Aby kompilator Eclipse działał poprawnie, musisz usunąć final / src ze ścieżki źródłowej i zamiast tego dodać final / src / main / java. Może to również rozwiązać problem, ponieważ teraz katalog kompilacji nie będzie znajdował się w folderze źródłowym Java.

Sasha O
źródło
0

IDE STS

Zależy to od tego, który folder ma zostać oznaczony jako „Użyj jako folderu źródłowego”. W strukturze na obrazku, jeśli ktoś mówi o tym do folderu „docelowy” lub „wygenerowany”, pojawia się błąd „zagnieżdżony”. Ale w folderze „cxf”, który jest ostatnim wymienionym w sekcji „plugin” pom.xml i gdzie zaczyna się struktura pakietu (jak pokazano w pliku .wsdl), tj. - właściwy folder do tego „źródłowy” , to nie ma błędu

yrz
źródło
0

Mam podobny problem. Wykonano następujące kroki, problem rozwiązany:

  1. Usuń projekt w zaćmieniu.
  2. Usuń plik .Project i. Folder ustawień.
  3. Zaimportuj projekt jako istniejący projekt maven ponownie do Eclipse.
Sposób
źródło
-3

Utwórz dwa foldery: final/src/do przechowywania kodu źródłowego Java i final/WebRoot/.

Nie możesz połączyć źródła i katalogu głównego. Myślę, że możesz źle zrozumieć swojego nauczyciela.

Jimmy Zhang
źródło