Co znajduje się w pliku Eclipse .classpath / .project?


143

Niedawno mieliśmy problem z projektem Eclipse dla jednego z członków naszego zespołu. Tomcat nie wdrażał plików JAR aplikacji.

W końcu zauważyliśmy, że .classpathplik Eclipse nie był tym samym, co w przypadku członków zespołu, w przypadku których projekt był OK. Zastąpiliśmy .classpathplik plikiem z projektu, który był w porządku, a wdrażanie Tomcat zostało zakończone.

Tylko z ciekawości i aby wiedzieć, na co zwrócić uwagę w przyszłości, jeśli coś jest nie tak, co jest w plikach .classpathi .project. Co mogę tam dodać, co to wszystko oznacza?


Czy plik .classpath jest specyficzny dla języka Java? To pytanie wydaje się być w większości niezależne od języka, ale z tej odpowiedzi wydaje się, że odnosi się tylko do Javy.
Casey Kuball

Odpowiedzi:


144

Eclipse to środowisko wykonawcze dla wtyczek. Praktycznie wszystko, co widzisz w Eclipse, jest wynikiem wtyczek zainstalowanych w Eclipse, a nie samego Eclipse.

.projectPlik jest utrzymywana przez rdzeń platformy Eclipse, a jego celem jest opisanie projektu od ogólnego, wtyczki niezależne widzenia Eclipse. Jak nazywa się projekt? jakich innych projektów w obszarze roboczym on dotyczy? Jakie kreatory są używane do tworzenia projektu? (pamiętaj, że pojęcie „budowania” nie odnosi się konkretnie do projektów Java, ale także do innych typów projektów)

.classpathPlik jest utrzymywana przez JDT funkcji Eclipse ( feature = zbiór wtyczek). JDT przechowuje wiele takich plików „meta” w projekcie (zobacz .settingskatalog wewnątrz projektu); .classpathplik jest tylko jednym z nich. W szczególności .classpathplik zawiera informacje, których funkcja JDT potrzebuje do prawidłowego skompilowania projektu: foldery źródłowe projektu (czyli co skompilować); foldery wyjściowe (gdzie skompilować do ); i wpisy ścieżki klas (takie jak inne projekty w obszarze roboczym, dowolne pliki JAR w systemie plików itp.).

Ślepe kopiowanie takich plików z jednego komputera na inny może być ryzykowne. Na przykład, jeśli dowolne pliki JAR są umieszczane w ścieżce klas (to znaczy pliki JAR, które znajdują się poza obszarem roboczym i są określane przez bezwzględne nazewnictwo ścieżek), .classpathplik jest renderowany nieprzenośny i musi zostać zmodyfikowany, aby przenośny. Istnieją pewne sprawdzone metody, których można przestrzegać, aby zagwarantować .classpathprzenośność plików.


58
Jako osoba z zewnątrz w tej całej sprawie, wszystko to przekłada się na „Eclipse w jakiś sposób udaje się zmienić wszystko, co dotyczy zarządzania przestrzenią roboczą projektu, w nieodgadnioną czarną sztukę, która jest zbyt trudna do zrozumienia dla każdego”.
Warren P

1
@Isaac - Z ciekawości, na wypadek, gdybym zarządzał swoim projektem za pomocą giti Maven, co oznacza, że ​​mam (dla uproszczenia) folder „główny” repozytorium (projektu) z pojedynczym srcfolderem (zawiera prosty .javaplik „hello world” ) i projektu pox.xmlplik - tak, Jeśli ja zrozumiałem prawidłowo, nie ma potrzeby (a może nawet nie trzeba koniecznie), aby zachować: .project, .classpathi .settings/pliki / foldery, jak również w gitrepozytorium (ie- dodać je do .gitignorepliku na przykład)?
Guy Avraham

1
@GuyAvraham, które zależy od tego, jak pracujesz z Eclipse, a konkretnie - jak zainicjować obszar roboczy. Czy uruchamiasz Eclipse na nowym obszarze roboczym, a następnie używasz „importu istniejących projektów Maven”? jeśli tak, to masz rację - żaden z tych plików nie jest naprawdę potrzebny, ponieważ m2eclipsedba o to za Ciebie (a przynajmniej tak powinno być).
Izaak,

1
@buncis .projectnie powinno być w .gitignore. Jeśli chodzi o .classpath- jeśli używasz m2eclipsei twój obszar roboczy jest skonfigurowany do aktualizowania projektów Maven podczas uruchamiania, powinieneś być w porządku z dodawaniem .classpathdo, .gitignoreale sam tego nie testowałem.
Izaak

1
@buncis poprawiam tylko ten ostatni komentarz. Najwyraźniej M2E wykonuje obecnie bardzo dobrą robotę przy konfigurowaniu projektów. Ostatnio pracowałem nad bazą kodu złożoną z około 150 projektów Java wszystkich typów. Usunąłem .projecti .classpathze wszystkich i dodałem do .gitignore. Wszystko działa dobrze i nie muszę zbyt często aktualizować tych plików w nieskończoność w Git.
Izaak

37

.project

Gdy projekt jest tworzony w obszarze roboczym, automatycznie generowany jest plik opisu projektu, który opisuje projekt. Jedynym celem tego pliku jest uczynienie projektu samoopisującym, tak aby projekt, który jest spakowany lub wydany na serwer, mógł zostać poprawnie odtworzony w innym obszarze roboczym.

.classpath

Classpath określa, które pliki źródłowe Java i pliki zasobów w projekcie są uwzględniane przez program budujący Java i określa, jak znaleźć typy poza projektem. Kreator Java kompiluje pliki źródłowe Java do folderu wyjściowego, a także kopiuje do niego zasoby.


11

Pełne odniesienie nie jest dostępne dla wymienionych plików, ponieważ można je rozszerzać za pomocą różnych wtyczek.

Zasadniczo pliki .project przechowują ustawienia projektu, takie jak ustawienia konstruktora i natury projektu, podczas gdy pliki .classpath definiują ścieżkę klas, która ma być używana podczas uruchamiania. Pliki classpath zawierają pozycje src i target, które odpowiadają folderom w projekcie; wpisy con są używane do opisania pewnego rodzaju "wirtualnych" wpisów, takich jak biblioteki JVM lub w przypadku zależności wtyczek eclipse (normalne zależności projektów Java są wyświetlane inaczej, przy użyciu specjalnego wpisu src).


3

Ta dokumentacja Eclipse zawiera szczegółowe informacje na temat znaczników w .projectpliku: Plik opisu projektu

Opisuje .projectplik jako:

Gdy projekt jest tworzony w obszarze roboczym, automatycznie generowany jest plik opisu projektu, który opisuje projekt. Celem tego pliku jest uczynienie projektu samoopisującym, tak aby projekt, który jest spakowany lub wydany na serwer, mógł zostać poprawnie odtworzony w innym obszarze roboczym. Ten plik ma zawsze nazwę „.project”

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.