Erreurs D'Imbrication Du Chemin De Construction Eclipse
Je travaille sur une simple webapp 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 veut tout notre code source sous src/main/java et src/main/webapp.
Lorsque j'exécute 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 construction erreur de chemin d'accès. J'ai final / src sur le chemin de construction 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 assembly de déploiement:
<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
Lorsque j'exclus main / l'avertissement disparaît, mais cela ne résout pas le problème. Je vous serais reconnaissant de tout conseil. Grâce.
10 réponses
J'ai eu le même problème même lorsque j'ai créé un nouveau projet.
Je créais le projet Java dans Eclipse, puis je le mavenize, puis je vais dans les propriétés du chemin de construction java en supprimant src/
et en ajoutant src/main/java
et src/test/java
. Lorsque je lance Maven update, il donnait une erreur de chemin imbriqué.
Puis j'ai finalement réalisé-parce que je n'avais pas vu cette entrée avant-il y a une ligne <sourceDirectory>src</sourceDirectory>
dans le fichier pom écrit Quand je l'ai mavenize. Il a été résolu après l'avoir retiré.
Je voulais lancer une réponse non-mavenish à 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) de faire quelque chose de similaire à supprimer src/
et ajouter src/main/java
et src/test/java
au chemin de construction.
J'avais en fait été off-and-on luttant contre ce problème de chemin de construction imbriqué pendant quelques semaines. La réponse au problème est suggérée dans l'erreur message:
To enable the nesting exclude 'main/' from 'final/src'
Fixer
Dans votre build path, vous devez modifier votre Inclusion and Exclusion Patterns
en cliquant sur Excluded: (None)
, puis Edit...
:
- allez dans le navigateur et appuyez sur le clic droit sur le projet
- Chemin De Construction
- Configurer Le Chemin De Construction
- Source (onglet)
Là, vous pouvez ajouter main/webapp/WEB-INF/classes
comme Exclusion Pattern
. Ensuite, il devrait vous permettre d'ajouter main/webapp/WEB-INF/classes
au chemin de construction en tant que dossier source séparé.
, Essayez ceci:
Dans 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"
Ajoutez-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 De "Bibliothèques D'Applications Web":
Vous devez séparer vos sources et votre répertoire cible où va la sortie de 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 le Conseil de votre professeur-en fait, il fait la promotion de la structure de source standard Maven ./src/main/java et ./src/main/webapp. Le second devrait tenir par exemple. le web obligatoire-INF / web.fichier xml mais vous ne mettrez jamais de classes réelles là-bas.
Ce que vous devez changer est votre répertoire cible. Je suggère d'aller avec les mêmes normes et de choisir le nom"./target" pour cela. Tous les fichiers construits iront ici et l'emballage qui résultera un artefact déployable correct. Si vous migrez vers Maven plus tard, cela vous aidera également à le faire de manière scriptée et reproductible.
J'espère que cela éclaircit votre problème.
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 était d'aller à Build Path->Configure Build Path
et sous l'onglet source j'ai supprimé toutes les sources (qui n'avaient qu'une seule 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'effacer l'erreur.
La solution acceptée n'a pas fonctionné pour moi mais j'ai fait quelques recherches sur les paramètres du projet.
La solution suivante l'a corrigé pour moi au moins si vous utilisez un projet web dynamique:
- Faites un clic droit sur le projet puis les propriétés. (ou alt-entrée sur le projet)
- sous assemblage de déploiement, supprimer "src".
Vous devriez pouvoir ajouter le src / main / java. Il l'ajoute également automatiquement à L'assemblage de déploiement.
Mise en garde: Si vous avez ajouté un src / test / java notez qu'il l'ajoute également à L'assemblage de déploiement. Généralement, vous n'avez pas besoin de cela. Vous pouvez le supprimer.
Dans mon cas, j'ai un gradle la nature du projet à eclipse, le problème était dans un build.gradle
, où ce sourceSets
est spécifié:
sourceSets {
main {
java {
srcDir 'src'
}
}
}
Cela semble fonctionne bien avec intelliJ,semble toutefois que eclipse n'aime pas le nid src
, src/java
, src/resources
. Dans eclipse je dois le modifier:
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 à la place. Cela peut également résoudre votre problème car maintenant le répertoire de construction ne sera pas dans le dossier source Java.
Cela a commencé à me prendre dans un énorme trou de lapin de corriger les problèmes avec Eclipse, mais je viens de supprimer le projet D'Eclipse et de le réimporter pour le réparer.
Créez deux dossiers: final/src/
pour stocker le code java source, et
final/WebRoot/
.
Vous ne pouvez pas mettre la source et le webroot ensemble. Je pense que vous pouvez mal comprendre votre professeur.