Erreurs d'imbrication du chemin de construction Eclipse

122

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 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, j'obtiens:

 Http 500 SEVERE: Allocate exception for servlet InitDb

java.lang.ClassNotFoundException. Je suis presque sûr que c'est une erreur de chemin de construction. 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'

entrez la description de l'image ici

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. J'apprécierais n'importe quel conseil. Merci.

Everhill
la source

Réponses:

309

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 suis entré dans les propriétés du chemin de construction java en supprimant src/et en ajoutant src/main/javaet src/test/java. Lorsque j'exécute la mise à jour Maven, cela donne une erreur de chemin imbriqué.
Puis j'ai finalement réalisé - parce que je n'avais jamais vu cette entrée auparavant - qu'il y avait une <sourceDirectory>src</sourceDirectory>ligne dans le fichier pom écrite lorsque je la mavenise. Il a été résolu après sa suppression.

acheron55
la source
1
Ce n'est qu'une des nombreuses astuces aléatoires. Ne pas expliquer pourquoi. Donc moins utile.
smwikipedia
4
Je viens de renommer l'entrée pom en scr / main / java et tout était bon. Merci pour le message acheron55
Beezer
l'avez-vous mis là? ou d'où vient-il?
Ligne
23

Je voulais apporter une réponse non mavenish à ce fil.

Pour des raisons de contrôle de version et de structure de répertoires stricte, je n'ai pas pu suivre la réponse d'Acheron (la meilleure réponse) de faire quelque chose de similaire à la suppression src/et l'ajout src/main/javaetsrc/test/java au chemin de construction.

En fait, je luttais régulièrement contre ce problème de chemin de construction imbriqué depuis quelques semaines. La réponse au problème est suggéré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 Patternsen cliquant sur Excluded: (None)puis Edit...:

  1. Allez dans le navigateur et faites un clic droit sur le projet
  2. Construire le chemin
  3. Configurer le chemin de construction
  4. Source (onglet)

Modèles d'exclusion

Là, vous pouvez ajouter en main/webapp/WEB-INF/classestant que fichier Exclusion Pattern. Ensuite, il devrait vous permettre d'ajouter main/webapp/WEB-INF/classesau chemin de construction en tant que dossier source distinct.

heez
la source
10

Essaye ça:

Depuis 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 à nouveau dans:

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

Mettre en évidence "Bibliothèques d'applications Web":

Mettre en évidence "Bibliothèques d'applications Web"

Sireesh Yarlagadda
la source
3

J'ai eu le même problème et la bonne réponse ci-dessus n'a pas fonctionné pour moi. Ce que j'ai fait pour le résoudre était d'aller dans Build Path->Configure Build Pathet 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 de corriger l'erreur.

Hatem Jaber
la source
3

Dans mon cas, j'ai un projet de nature gradle dans eclipse , le problème était dans un build.gradle, où cela sourceSetsest spécifié:

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

Cela semble fonctionne bien avec IntelliJ , semble cependant que l' éclipse ne le fait pas comme nid src, src/java, src/resources. Dans eclipse, je dois le changer en:

sourceSets {
    main {
        java {
            srcDir 'src/main/java'
        }
    }
}
albciff
la source
3

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.
abhijeet104
la source
2

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 l'avis de votre professeur - en fait, il fait la promotion de la structure source standard de maven pour ./src/main/java et ./src/main/webapp. Le second devrait tenir par exemple. le fichier WEB-INF / web.xml obligatoire mais vous n'y mettrez jamais de classes réelles.

Ce que vous devez changer, c'est votre répertoire cible. Je suggère d'aller avec les mêmes standards et de choisir le nom "./target" pour cela. Tous les fichiers construits iront ici et l'empaquetage aboutira à un artefact déployable correct. Si vous migrez vers l'utilisation de maven plus tard, cela vous aidera également à le faire de manière scriptée et répétable.

J'espère que cela résout votre problème.

Kristof Jozsa
la source
1

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:

  1. Faites un clic droit sur le projet puis sur les propriétés. (ou alt-enter sur le projet)
  2. Sous Deployment Assembly, supprimez "src".

Vous devriez pouvoir ajouter le fichier src / main / java. Il l'ajoute également automatiquement à l'assembly de déploiement.

Attention: si vous avez ajouté un src / test / java, notez qu'il l'ajoute également à l'assembly de déploiement. Généralement, vous n'en avez pas besoin. Vous pouvez le supprimer.

Tchad
la source
1

Cela a commencé à m'emporter dans un énorme trou de lapin de correction de problèmes avec Eclipse, mais je viens de supprimer le projet d'Eclipse et de le réimporter pour le corriger.

Carson
la source
0

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 plus dans le dossier source Java.

Sasha O
la source
0

IDE STS

Cela dépend du dossier auquel on dit «Utiliser comme dossier source». Dans la structure sur l'image si on le dit dans le dossier "cible" ou "généré", il obtient l'erreur "imbriquée". Mais sur le dossier "cxf", qui est le dernier, mentionné dans la section 'plugin' de pom.xml et d'où commence la structure du paquet (comme indiqué sur le fichier .wsdl), c'est-à-dire - le bon dossier pour le faire un 'source' , alors il n'y a pas d'erreur

yrz
la source
0

Vous avez un problème similaire. A fait les étapes suivantes, problème résolu:

  1. Supprimer le projet dans eclipse.
  2. Supprimer le fichier .Project et. Dossier Paramètres.
  3. Importez à nouveau le projet en tant que projet maven existant pour éclipse.
Façon
la source
-3

Créez deux dossiers: final/src/pour stocker le code java source et final/WebRoot/.

Vous ne pouvez pas associer la source et la racine Web. Je pense que vous pouvez mal comprendre votre professeur.

Jimmy Zhang
la source