web-dev-qa-db-fra.com

Erreurs d'imbrication dans le chemin de génération Eclipse

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'

enter image description here

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. 

104
CodeNameBrandon

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é.

276
acheron55

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...:

  1. Allez dans le navigateur et cliquez droit sur le projet
  2. Chemin de construction
  3. Configurer le chemin de construction
  4. Source (onglet)

 Exclusion Patterns

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é.

17
heez

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":

Highlighting "Web App Libraries"

10

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.

2
Hatem Jaber

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.

2
Kristof Jozsa

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:

  1. Faites un clic droit sur le projet puis sur les propriétés. (ou alt-enter sur le projet)
  2. Sous Assemblée de déploiement, supprimez "src".

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.

1
Chad

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'
        }
    }
}
1
albciff

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.

0
Sasha O

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.

0
Carson

Voici une solution simple:

  1. Faites un clic droit sur le projet >> propriétés >> chemin de construction;
  2. Dans l'onglet Source, sélectionnez tous les dossiers source.
  3. Retirez-les;
  4. Faites un clic droit sur le projet, Maven >> Mettre à jour le projet.
0
abhijeet104