Was ist in einer Eclipse .classpath / .project-Datei?

143

Wir hatten kürzlich ein Problem mit einem Eclipse-Projekt für eines unserer Teammitglieder. Tomcat stellte keine JARs der Anwendung bereit.

Wir haben schließlich festgestellt, dass die .classpathEclipse-Datei nicht mit der der Teammitglieder übereinstimmt, bei denen das Projekt in Ordnung war. Wir haben die .classpathDatei durch eine Datei aus einem Projekt ersetzt, das in Ordnung war und die Tomcat-Bereitstellung war abgeschlossen.

Nur aus Neugier und um zu wissen, was in Zukunft zu sehen ist, wenn etwas nicht stimmt, was sich in den .classpathund .projectDateien befindet. Was kann ich da hinzufügen, was bedeutet das alles?

totale Finsternis
quelle
Ist die .classpath-Datei spezifisch für Java? Diese Frage scheint größtenteils sprachunabhängig zu sein, aber aus dieser Antwort geht hervor, dass sie nur für Java relevant ist.
Casey Kuball

Antworten:

144

Eclipse ist eine Laufzeitumgebung für Plugins. Praktisch alles, was Sie in Eclipse sehen, ist das Ergebnis von Plugins, die auf Eclipse installiert sind, und nicht von Eclipse selbst.

Die .projectDatei wird von der Eclipse-Kernplattform verwaltet. Ziel ist es, das Projekt in einer generischen, Plugin-unabhängigen Eclipse-Ansicht zu beschreiben. Wie heißt das Projekt? Auf welche anderen Projekte im Arbeitsbereich bezieht es sich? Welche Builder werden verwendet, um das Projekt zu erstellen? (Denken Sie daran, das Konzept des "Builds" bezieht sich nicht speziell auf Java-Projekte, sondern auch auf andere Arten von Projekten.)

Die .classpathDatei wird von der JDT-Funktion von Eclipse verwaltet ( Feature = Satz von Plugins). JDT enthält mehrere solcher "Metadateien" im Projekt (siehe das .settingsVerzeichnis im Projekt). Die .classpathDatei ist nur eine davon. Insbesondere .classpathenthält die Datei Informationen, die die JDT-Funktion benötigt, um das Projekt ordnungsgemäß zu kompilieren: die Quellordner des Projekts (dh was kompiliert werden soll); die Ausgabeordner (wo kompiliert werden soll ); und Klassenpfadeinträge (wie andere Projekte im Arbeitsbereich, beliebige JAR-Dateien im Dateisystem usw.).

Das blinde Kopieren solcher Dateien von einem Computer auf einen anderen kann riskant sein. Wenn beispielsweise beliebige JAR-Dateien im Klassenpfad abgelegt werden (dh JAR-Dateien, die sich außerhalb des Arbeitsbereichs befinden und auf die durch die absolute Pfadbenennung verwiesen wird), wird die .classpathDatei nicht portierbar und muss geändert werden tragbar. Es gibt bestimmte Best Practices, die befolgt werden können, um die .classpathPortabilität von Dateien zu gewährleisten .

Isaac
quelle
57
Als Außenseiter dieser ganzen Sache bedeutet dies: "Eclipse schafft es irgendwie, alles über die Verwaltung von Projektarbeitsbereichen zu einer unergründlichen schwarzen Kunst zu machen, die für niemanden zu schwer zu verstehen ist."
Warren P
1
@Isaac - Aus Neugier, falls ich mein Projekt mit gitund verwalte Maven, dh ich habe (der Einfachheit halber) den "root" -Ordner des Repositorys (Projekts) mit einem einzigen srcOrdner (enthält eine einfache "Hallo Welt" .java-Datei) und die pox.xmlProjektdatei - so, wenn ich Sie richtig verstanden habe , gibt es keine Notwendigkeit (oder vielleicht sogar notwendigerweise nicht erforderlich) die halten: .project, .classpathund .settings/Dateien / Ordner als auch im gitRepository (IE- fügen Sie sie in die .gitignoreDatei zum Beispiel)?
Guy Avraham
1
@GuyAvraham, das hängt davon ab, wie Sie mit Eclipse arbeiten und insbesondere davon, wie Sie einen Arbeitsbereich initialisieren. Starten Sie Eclipse in einem neuen Arbeitsbereich und verwenden Sie dann "Vorhandene Maven-Projekte importieren"? Wenn ja, dann haben Sie Recht - keine dieser Dateien wird wirklich benötigt, da dies m2eclipsefür Sie erledigt ist (oder zumindest ist es das, was es tun soll).
Isaac
1
@buncis .projectsollte nicht in sein .gitignore. In Bezug auf .classpath- Wenn Sie verwenden m2eclipseund Ihr Arbeitsbereich so konfiguriert ist, dass Maven-Projekte beim Start aktualisiert werden, sollten Sie mit dem Hinzufügen .classpathzu einverstanden sein , .gitignoreaber ich habe es nicht selbst getestet.
Isaac
1
@buncis korrigiert nur den letzten Kommentar. Anscheinend leistet M2E heutzutage sehr gute Arbeit bei der Konfiguration von Projekten. Ich habe kürzlich an einer Codebasis von ungefähr 150 Java-Projekten aller Art gearbeitet. Ich entfernte .projectund .classpathvon allen und fügte hinzu .gitignore. Alles funktioniert gut und ich muss diese Dateien in Git nicht zu häufig endlos aktualisieren.
Isaac
37

.project

Wenn ein Projekt im Arbeitsbereich erstellt wird, wird automatisch eine Projektbeschreibungsdatei generiert, die das Projekt beschreibt. Der einzige Zweck dieser Datei besteht darin, das Projekt selbstbeschreibend zu machen, damit ein Projekt, das komprimiert oder auf einem Server freigegeben wurde, in einem anderen Arbeitsbereich korrekt neu erstellt werden kann.

.classpath

Der Klassenpfad gibt an, welche Java-Quelldateien und Ressourcendateien in einem Projekt vom Java-Builder berücksichtigt werden, und gibt an, wie Typen außerhalb des Projekts gefunden werden. Der Java Builder kompiliert die Java-Quelldateien in den Ausgabeordner und kopiert auch die Ressourcen in diesen Ordner.

Rupesh Yadav
quelle
11

Für die genannten Dateien ist keine vollständige Referenz verfügbar, da sie durch verschiedene Plug-Ins erweiterbar sind.

Grundsätzlich speichern .project-Dateien Projekteinstellungen wie Builder- und Projektnatureinstellungen, während .classpath-Dateien den Klassenpfad definieren, der während der Ausführung verwendet werden soll. Die Klassenpfaddateien enthalten src- und Zieleinträge, die Ordnern im Projekt entsprechen. Die con-Einträge werden verwendet, um eine Art "virtueller" Einträge zu beschreiben, wie z. B. die JVM-Bibliotheken oder bei Eclipse-Plug-Ins-Abhängigkeiten (normale Java-Projektabhängigkeiten werden mithilfe eines speziellen src-Eintrags unterschiedlich angezeigt).

Zoltán Ujhelyi
quelle
3

Diese Eclipse-Dokumentation enthält Details zu den Markups in der .projectDatei: Die Projektbeschreibungsdatei

Es beschreibt die .projectDatei als:

Wenn ein Projekt im Arbeitsbereich erstellt wird, wird automatisch eine Projektbeschreibungsdatei generiert, die das Projekt beschreibt. Der Zweck dieser Datei besteht darin, das Projekt selbstbeschreibend zu gestalten, damit ein Projekt, das komprimiert oder auf einem Server freigegeben wurde, in einem anderen Arbeitsbereich korrekt neu erstellt werden kann. Diese Datei heißt immer ".project"

Senpai
quelle