Que contient un fichier .classpath / .project Eclipse?

143

Nous avons récemment eu un problème avec un projet Eclipse pour l'un des membres de notre équipe. Tomcat ne déployait pas les JAR de l'application.

Nous avons finalement remarqué que le .classpathfichier Eclipse n'était pas le même que pour les membres de l'équipe où le projet était OK. Nous avons remplacé le .classpathfichier par celui d'un projet qui était OK et le déploiement de Tomcat était terminé.

Juste par curiosité et pour savoir ce qu'il faut regarder dans le futur si quelque chose ne va pas, ce qu'il y a à l'intérieur des fichiers .classpathet .project. Que puis-je ajouter, qu'est-ce que tout cela signifie?

éclipse totale
la source
Le fichier .classpath est-il spécifique à Java? Cette question semble principalement indépendante du langage, mais d'après cette réponse, il semble qu'elle ne concerne que Java.
Casey Kuball
Related

Réponses:

144

Eclipse est un environnement d'exécution pour les plugins. Pratiquement tout ce que vous voyez dans Eclipse est le résultat de plugins installés sur Eclipse, plutôt qu'Eclipse lui-même.

le .project fichier est géré par la plate-forme principale Eclipse et son objectif est de décrire le projet à partir d'une vue Eclipse générique et indépendante du plugin. Quel est le nom du projet? à quels autres projets de l'espace de travail fait-il référence? Quels sont les générateurs utilisés pour construire le projet? (rappelez-vous que le concept de "build" ne concerne pas spécifiquement les projets Java, mais également d'autres types de projets)

Le .classpathfichier est maintenu par la fonctionnalité JDT d'Eclipse ( fonctionnalité = ensemble de plugins). JDT contient plusieurs fichiers "méta" dans le projet (voir le .settingsrépertoire à l'intérieur du projet); le .classpathfichier n'est que l'un d'entre eux. Plus précisément, le .classpathfichier contient les informations dont la fonctionnalité JDT a besoin pour compiler correctement le projet: les dossiers source du projet (c'est-à-dire ce qu'il faut compiler); les dossiers de sortie (où pour compiler à ); et les entrées de chemin de classe (comme d'autres projets dans l'espace de travail, des fichiers JAR arbitraires sur le système de fichiers, etc.).

La copie aveugle de ces fichiers d'une machine à une autre peut être risquée. Par exemple, si des fichiers JAR arbitraires sont placés sur le chemin de classe (c'est-à-dire des fichiers JAR qui sont situés en dehors de l'espace de travail et sont référencés par un nom de chemin absolu), le .classpathfichier est rendu non portable et doit être modifié pour être portable. Il existe certaines meilleures pratiques qui peuvent être suivies pour garantir .classpathla portabilité des fichiers.

Isaac
la source
58
En tant qu'extérieur à tout cela, tout cela se traduit par "Eclipse parvient d'une manière ou d'une autre à transformer tout ce qui concerne la gestion de l'espace de travail du projet en un art noir impénétrable qui est trop difficile à comprendre pour quiconque".
Warren P
1
@Isaac - Par curiosité, au cas où je gère mon projet avec gitet Maven, c'est-à-dire que j'ai (pour simplifier) ​​le dossier «racine» du référentiel (projet) avec un seul srcdossier (contient un simple .javafichier «hello world» ) et le du projet pox.xmlde fichier - donc, si je vous ai bien compris, il n'y a pas besoin (ou peut - être même nécessairement pas besoin) de garder le: .project, .classpathet les .settings/fichiers / dossiers et dans le gitréférentiel (IE- les ajouter au .gitignorefichier par exemple)?
Guy Avraham
1
@GuyAvraham cela dépend de la façon dont vous travaillez avec Eclipse, et plus précisément - comment initialiser un espace de travail. Démarrez-vous Eclipse sur un nouvel espace de travail, puis utilisez-vous "importer des projets Maven existants"? si c'est le cas, alors vous avez raison - aucun de ces fichiers n'est vraiment nécessaire, car il m2eclipses'en charge pour vous (ou, du moins, c'est ce qu'il est censé faire).
Isaac
1
@buncis .projectne devrait pas être dans .gitignore. En ce qui concerne .classpath- si vous utilisez m2eclipseet votre espace de travail est configuré pour mettre à jour les projets Maven au démarrage, alors vous devriez être OK avec ajouter .classpathà .gitignoremais je l' ai pas testé moi - même.
Isaac le
1
@bunc ne fait que corriger ce dernier commentaire. Apparemment, M2E fait un très bon travail de nos jours en configurant des projets. J'ai récemment travaillé sur une base de code d'environ 150 projets Java de tous types. J'ai supprimé .projectet .classpathde tous et ajouté à .gitignore. Tout fonctionne bien et je n'ai pas besoin de mettre à jour indéfiniment ces fichiers dans Git trop fréquemment.
Isaac
37

.project

Lorsqu'un projet est créé dans l'espace de travail, un fichier de description de projet est automatiquement généré pour décrire le projet. Le seul but de ce fichier est de rendre le projet auto-descriptif, afin qu'un projet compressé ou publié sur un serveur puisse être correctement recréé dans un autre espace de travail.

.classpath

Classpath spécifie les fichiers source Java et les fichiers de ressources d'un projet pris en compte par le générateur Java et spécifie comment rechercher des types en dehors du projet. Le générateur Java compile les fichiers source Java dans le dossier de sortie et y copie également les ressources.

Rupesh Yadav
la source
11

La référence complète n'est pas disponible pour les fichiers mentionnés, car ils sont extensibles par divers plug-ins.

Fondamentalement, les fichiers .project stockent les paramètres du projet, tels que les paramètres du générateur et de la nature du projet, tandis que les fichiers .classpath définissent le chemin d'accès aux classes à utiliser pendant l'exécution. Les fichiers classpath contiennent les entrées src et target qui correspondent aux dossiers du projet; les entrées con sont utilisées pour décrire une sorte d'entrées "virtuelles", telles que les bibliothèques JVM ou en cas de dépendances de plug-ins eclipse (les dépendances de projet Java normales sont affichées différemment, en utilisant une entrée src spéciale).

Zoltán Ujhelyi
la source
3

Cette documentation éclipse contient des détails sur les annotations dans le .projectfichier: Le fichier de description du projet

Il décrit le .projectfichier comme:

Lorsqu'un projet est créé dans l'espace de travail, un fichier de description de projet est automatiquement généré pour décrire le projet. Le but de ce fichier est de rendre le projet auto-descriptif, afin qu'un projet compressé ou publié sur un serveur puisse être correctement recréé dans un autre espace de travail. Ce fichier est toujours appelé ".project"

senpai
la source