Je travaille sur une simple application Web JSP/Servlet/Tomcat pour ma classe. Le professeur nous a demandé d'utiliser une structure de dossiers légèrement différente de la structure de projet Web dynamique par défaut. Plutôt que d'utiliser le dossier webcontent, il souhaite que tout notre code source soit sous src/main/Java et src/main/webapp.
Lorsque je lance l'application, mon fichier de bienvenue s'affiche correctement, mais lorsque j'essaie d'accéder à mes servlets, je reçois:
Http 500 SEVERE: Allocate exception for servlet InitDb
Java.lang.ClassNotFoundException. Je suis sûr que c'est une erreur de construction. J'ai final/src sur le chemin de compilation mais je reçois l'avertissement
"Cannot nest 'final/src/main/webapp/WEB-INF/classes' inside 'final/src'. To enable the nesting exclude 'main/' from 'final/src'
J'ai ceci dans mon déploiement Assembly:
<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
Lorsque j'exclus principal/l'avertissement disparaît, mais cela ne résout pas le problème. J'apprécierais n'importe quel conseil. Merci.
J'ai eu le même problème même quand j'ai créé un nouveau projet. Je créais le projet Java dans Eclipse, puis le mavenisais, puis je passais aux propriétés du chemin de construction Java en supprimant src/
et en ajoutant src/main/Java
et src/test/Java
. Lorsque je lance la mise à jour Maven, cela donnait une erreur de chemin imbriquée.
Puis j'ai finalement réalisé - car je n'avais pas vu cette entrée auparavant - il y a une ligne <sourceDirectory>src</sourceDirectory>
dans le fichier pom écrit lorsque je la mavenize. Il a été résolu après l'avoir enlevé.
Je voulais ajouter une réponse non maven à ce fil.
Pour des raisons de contrôle de version et de structure de répertoire stricte, je n'ai pas pu suivre la réponse d'Acheron (la meilleure réponse) consistant à supprimer src/
et à ajouter src/main/Java
et src/test/Java
au chemin de génération.
En fait, je combattais ce problème de construction imbriqué depuis quelques semaines. La réponse au problème est indiquée dans le message d'erreur:
To enable the nesting exclude 'main/' from 'final/src'
Réparer
Dans votre chemin de construction, vous devez éditer votre Inclusion and Exclusion Patterns
en cliquant sur Excluded: (None)
puis sur Edit...
:
Là, vous pouvez ajouter main/webapp/WEB-INF/classes
en tant que Exclusion Pattern
. Ensuite, cela devrait vous permettre d’ajouter main/webapp/WEB-INF/classes
au chemin de construction en tant que dossier source séparé.
Essaye ça:
À partir de l'onglet bibliothèques:
Eclipse -> right click on project name in sidebar -> configure build path -> Libraries
Supprimez vos bibliothèques d'applications Web:
click on "Web App Libraries" -> click "remove"
Rajoutez-les dans:
click "Add Library" -> click to highlight "Web App Libraries" -> click "next" -> confirm your desired project is the selected option -> click "Finish"
Mise en surbrillance des "bibliothèques d'applications Web":
J'ai eu le même problème et la réponse correcte ci-dessus n'a pas fonctionné pour moi. Ce que j'ai fait pour le résoudre a été d'aller à Build Path->Configure Build Path
et sous l'onglet source, j'ai supprimé toutes les sources (qui n'avaient qu'une source) et les ai reconfigurées à partir de là. J'ai fini par supprimer le projet d'Eclipse et importer à nouveau le projet Maven afin d'éliminer l'erreur.
Vous devez séparer vos sources et votre répertoire cible où se trouve la sortie de la construction. Il est également important de noter qu'aucun fichier de classe ne peut jamais se retrouver dans le répertoire source. Ce n'est pas contre l'avis de votre professeur: en réalité, il promeut la structure de source standard maven pour ./src/main/Java et ./src/main/webapp. Le second devrait contenir par exemple. le fichier WEB-INF/web.xml obligatoire, mais vous n'y placerez jamais les classes réelles.
Ce que vous devez changer, c'est votre répertoire cible. Je suggère d'aller avec les mêmes normes et en choisissant le nom "./target" pour cela. Tous les fichiers construits entreront ici et l'emballage qui en résultera donnera un artefact déployable correct. Si vous migrez plus tard vers maven, cela vous aidera également à le faire de manière reproductible et scriptée.
J'espère que cela clarifie votre problème.
La solution acceptée ne fonctionnait pas pour moi mais j'ai creusé dans les paramètres du projet.
La solution suivante a résolu le problème au moins si vous utilisez un projet Web dynamique:
Vous devriez pouvoir ajouter src/main/Java. Il l'ajoute également automatiquement à l'assemblage de déploiement.
Avertissement: si vous avez ajouté une note src/test/Java, cette dernière l'a également ajoutée à l'assemblage de déploiement. Généralement, vous n'en avez pas besoin. Vous pouvez l'enlever.
Dans mon cas, j'ai un projet Gradle Nature dans Eclipse , le problème était dans un build.gradle
, où cette sourceSets
est spécifiée:
sourceSets {
main {
Java {
srcDir 'src'
}
}
}
Cela semble bien fonctionner avec intelliJ , semble cependant que Eclipse n'aime pas nid src
, src/Java
, src/resources
. Dans Eclipse je dois le changer en:
sourceSets {
main {
Java {
srcDir 'src/main/Java'
}
}
}
Pour que le compilateur Eclipse fonctionne correctement, vous devez supprimer final/src du chemin source et ajouter final/src/main/Java. Cela peut également résoudre votre problème car le répertoire de construction ne se trouvera plus dans le dossier source Java.
Cela a commencé à me prendre dans un énorme lapin de problèmes avec Eclipse, mais je viens de supprimer le projet d’Eclipse et de le réimporter pour le réparer.
Voici une solution simple: