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'
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.
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 dodawaniasrc/main/java
orazsrc/test/java
do ś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ępnieEdit...
:Tam możesz dodać
main/webapp/WEB-INF/classes
jako plikExclusion Pattern
. Następnie powinno umożliwić dodaniemain/webapp/WEB-INF/classes
do ścieżki kompilacji jako oddzielnego folderu źródłowego.źródło
Spróbuj tego:
Z zakładki Biblioteki:
Usuń biblioteki aplikacji internetowych:
Dodaj je z powrotem w:
Podświetlanie „Bibliotek aplikacji internetowych”:
źródło
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 Path
zakł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.źródło
W moim przypadku mam projekt gradle nature w zaćmieniu , problem był w a
build.gradle
, gdziesourceSets
jest to określone: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:źródło
Oto proste rozwiązanie:
źródło
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.
źródło
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:
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ąć.
źródło
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ć.
źródło
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.
źródło
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
źródło
Mam podobny problem. Wykonano następujące kroki, problem rozwiązany:
źródło
Utwórz dwa foldery:
final/src/
do przechowywania kodu źródłowego Java ifinal/WebRoot/
.Nie możesz połączyć źródła i katalogu głównego. Myślę, że możesz źle zrozumieć swojego nauczyciela.
źródło