Un cycle a été détecté dans le chemin de construction du projet xxx-problème de chemin de construction
je suis en train de convertir mes projets en paquets OSGI en utilisant maven et eclipse. Maven construit le truc juste très bien, seulement je reçois l'erreur ci-dessus maintenant dans Eclipse. Comment puis-je savoir quel projet en est la cause? Est-il un affichage spécial ou quelque chose? Comment cela peut-il se produire, Je m'attends à ce que maven puisse détecter les dépendances cycliques aussi?
mise à Jour
Ok, j'ai trouvé quelque chose ici et ici
cela pourrait-il être causé par le felix maven-bundle-plugin qui fait pour chaque exportation aussi une importation?
16 réponses
marquer les dépendances circulaires comme" avertissement "dans L'outil Eclipse pour éviter" un CYCLE a été détecté dans le chemin de construction " erreur.
Dans Eclipse, allez à:
Windows -> Préférences -> Java-> Compiler -> Bâtiment> Dépendances Circulaires
lorsque nous avons plusieurs projets dans l'espace de travail, nous devons définir les références entre les projets, pas entre les projets. Si P1 renvoie à P2, P2 renvoie à P3, et P3 renvoie à P1. Qui sera la cause d'un cycle.
La Solution est de dessiner un Diagramme de la référence entre les projets dans l'espace de travail. Vérifiez le chemin de construction Java de chacun des projets pour voir l'onglet de la fenêtre des projets. Retirez le projet qui renvoie au projet principal, par exemple: P3 renvoie à P1, dans l'exemple ci-dessus.
opération détaillée est de sélectionner le projet P3 dans RAD ou eclipse, clic droit sur le projet et choisir l'option Propriétés, Il soulève une nouvelle fenêtre pour les propriétés de P3. Cliquez sur la section" Java Build Path", choisissez L'onglet" Projets". Vous pouvez voir que le P3 a référencé P1 sur le terrain. Sélectionnez la référence P1, cliquez sur le bouton "Supprimer" du côté droit de la fenêtre. Ensuite, cliquez sur ok. L'IDE va commencer à réinitialiser le chemin automatiquement.
fait.
conserver trouver toutes les références erronées dans chaque projet jusqu'à ce que vous ayez les bonnes références à chacun des projets dans votre diagramme. Bonne Chance!
j'ai eu cela en raison d'un projet faisant référence à un autre.
- supprimer la référence du projet A au projet B
- essayez de courir, ça va casser
- ajouter de nouveau la référence
- Clean / Clean and build
- de Retour dans les affaires
en termes simples, un cycle est quand le paquet A dépend du paquet B qui dépend du paquet A. Si c'est du code source, alors il n'y a aucun moyen de construire les paquets séparément en un seul passage.
puisque le problème n'apparaît Qu'en éclipse, il peut s'agir d'une dépendance circulaire binaire par opposition à à une dépendance circulaire du code source.
Il ya un soutien pour les cycles binaires dans les versions récentes de Eclipse: Eclipsesource Blog
si le cycle est dans votre code, alors je suggère de refactoriser le code en décomposant une partie du code en un 3ème paquet pour supprimer la dépendance circulaire.
et attention si vous utilisez des fragments OSGi (un modèle commun pour les tests unitaires) car il est très facile d'introduire des cycles.
l'éditeur de manifestes D'Eclipse a des fonctionnalités dans L'onglet" Dépendances " pour rechercher des cycles (vous devez cliquer sur "Analyse de dépendances""), mais je ne l'ai jamais vu montrer un cycle même quand Eclipse a un grand X rouge me disant qu'il y a un cycle!
problème
j'ai un vieux projet qui teste deux implémentations différentes d'une interface de dictionnaire. L'un est un ArrayList non trié et l'autre est un HashTable. Les deux implémentations sont chronométrés, de sorte qu'une comparaison puisse être faite. Vous pouvez choisir quelle structure de données de la ligne de commande args. Maintenant.. J'ai une autre structure de données qui est une structure en arbre. Je veux tester son heure, afin de la comparer au HashTable. Si.. Dans la nouvelle discbased projet, je dois mettre en œuvre l'interface du dictionnaire. Dans le projet de dictionnaire, je dois pouvoir ajouter du code spécifique à mon nouveau projet d'infrastructure de données. Il y a une dépendance circulaire. Cela signifie que quand Eclipse va trouver quels projets sont dépendants du projet A, alors il trouve le projet B. Quand il a besoin de trouver les sous-dépendances des projets dépendants, il trouve un, qui est de nouveau, dépendant de B. Il n'y a pas d'arbre, plutôt un graphique avec un cycle.
Solution
lorsque vous allez configurer votre chemin de compilation, au lieu de saisir des projets dépendants (onglet'Projets'), allez dans L'onglet Bibliothèques. Cliquez sur le dossier "Ajouter une classe"... bouton (en supposant que vos projets référencés dans votre espace de travail), et sélectionnez le dossier de la classe. Le mien est \cible. Sélectionnez ceci comme un dossier de bibliothèque. Faites ceci dans le projet a, en référence au projet B. faites ceci dans le projet B en référence au projet A. assurez-vous que vous ne faites pas référence à \target\projectNameFolder ou vous n'aurez pas de correspondance à l'importation. Vous n'aurez plus besoin de supprimer une dépendance et de la Réinitialiser pour forcer une reconstruction.
utilisez les bibliothèques de classe au lieu des références de projet.
Maven sera échec de la compilation si il détecte un cycle, comme les dépendances doit être un arbre.
vous pouvez trouver que vous avez des déclarations supplémentaires dans le manifeste.mf par rapport à ceux définis dans la pom.XML. toute déclaration supplémentaire pourrait introduire un cycle qui ne serait pas évident pour Maven.
ainsi que la forme Require-Bundle de gestion de dépendances (la plus similaire aux dépendances pom de Maven), il est également possible d'avoir des dépendances Import-Package. Il est beaucoup plus facile d'introduire des dépendances circulaires avec Import-Package que Require-Bundle, mais YMMV.
en outre, les projets Eclipse ont des "références de projet" qui indique quels autres projets il dépend. Eclipse utilise ceci à un niveau élevé pour décider quels projets construire, et dans quel ordre, donc c'est tout à fait possible que votre Manifeste.MF liste tout correctement, mais les références du projet sont hors de contrôle. Clic droit sur un projet, puis aller dans propriétés - vous verrez à quels projets dont vous dépendez. Si vous êtes du genre texte, ouvrez le .il est probable qu'un lien cyclique de projet est défini à ce niveau à la place (souvent causé lorsque vous avez une dépendance A-b et puis basculé de B-A mais sans mettre à jour le .projet référence.)
j'ai fait face à un problème similaire il y a un certain temps et j'ai décidé d'écrire le plug-in Eclipse qui montre l'arborescence complète de dépendance de chemin de compilation D'un projet Java (bien que pas en mode graphique - le résultat est écrit dans le fichier). Les sources du plug-in sont ici http://github.com/PetrGlad/dependency-tree
quand j'ai eu ces problèmes il a toujours été un vrai cycle dans les dépendances exprimées dans le Manifeste.mf
ouvrez donc le Manifeste du projet en question, dans L'onglet Dépendances, regardez l'entrée" plugins requis". Ensuite, suivez - le jusqu'au(X) projet (s) suivant (s), et répétez éventuellement le cycle deviendra clair.
vous pouvez simplifier quelque peu cette tâche en utilisant les liens D'analyse de dépendances dans le coin inférieur droit de la L'onglet Dependencies, il a la détection de cycle et les depdendencies de navigation plus faciles.
Je ne sais pas non plus pourquoi Maven est plus tolérant,
essayer de supprimer des références et de l'ajouter en arrière, parfois eclipse se comportent bizarre parce que jusqu'à et à moins que vous corrigiez cette erreur, il ne vous permettra pas de rafraîchir. donc, essayez de supprimer toutes les dépendances de projet et l'ajouter Nettoyer et construire
bien que" Mark Circular Dependencies " vous permette de compiler le code, cela peut conduire à un environnement plus lent et à des problèmes futurs.
cela se produit parce Qu'à un certain point Eclipse a perdu ses directions sur votre chemin de construction.
1 - supprimer le projet et ses références dans l'espace de travail. 2 - Importer de nouveau. 3 - Vérifier les références.
C'est la meilleure solution.
j'ai fait face à ce même problème aujourd'hui. L'erreur a été apt. Par erreur, j'ai ajouté la dépendance cyclique. A dépendait de B. Dans mon cas, par erreur, à part Ajouter B comme dépendant à A. j'ai ajouté A comme dépendant à B aussi. C'était une erreur stupide.
j'ai ce problème aussi.J'ai désactivé la résolution de L'espace de travail, et tout était normal. entrez la description de l'image ici
cela pourrait se produire lorsque vous avez plusieurs projets qui comprennent l'un l'autre sous forme de JAR. Ce que j'ai fait, c'est supprimer toutes les bibliothèques et les dépendances de projet sur buildpath, pour tous les projets. Puis, un à la fois, j'ai ajouté les dépendances de projet sur L'onglet Projet, mais seulement celles nécessaires. C'est parce que vous pouvez ajouter un projet qui à son tour s'est référencé ou un autre projet qui se réfère à un autre projet avec cette question d'auto-référencement.
This résolu mon problème.
parfois marquage D'avertissement
Windows -> Préférences -> Java-> Compiler -> Bâtiment> Dépendances Circulaires
ne résolvez pas le problème car eclipse ne compile pas les projets qui ont un autre projet dans les dipendences qui n'est pas compilé.
donc pour résoudre ce problème, vous pouvez essayer de forcer elcipse à compiler chaque classe qu'il peut.
à faire c'est juste:
-
Désélectionner
Windows -> Préférences -> Java-> Compiler - > - > Abandon de construire, lorsque le chemin de génération d'erreur se produire
-
Propre et la reconstruction de tous les projet
Project - > Clean...
-
sélectionnez à nouveau:
Windows -> Préférences -> Java-> Compiler - > - > Abandon de construire, lorsque le chemin de génération d'erreur se produire
si vous avez sélectionné la construction automatique, vous n'aurez pas à le faire à chaque fois que vous changez le code