Apa yang ada dalam file .classpath / .project Eclipse?


143

Kami baru-baru ini memiliki masalah dengan proyek Eclipse untuk salah satu anggota tim kami. Tomcat tidak menggunakan JAR aplikasi.

Kami akhirnya melihat .classpathfile Eclipse tidak sama dengan anggota tim di mana proyek itu OK. Kami mengganti .classpathfile dengan satu dari proyek yang OK dan penyebaran Tomcat selesai.

Hanya ingin tahu dan untuk mengetahui apa yang harus dicari di masa depan jika ada sesuatu yang salah, apa yang ada di dalam .classpathdan .projectfile. Apa yang bisa saya tambahkan di sana, apa artinya semua itu?


Apakah file .classpath khusus untuk Java? Pertanyaan ini tampaknya sebagian besar bahasa-agnostik, tetapi dari jawaban ini sepertinya hanya relevan untuk Java.
Casey Kuball

Jawaban:


144

Eclipse adalah lingkungan runtime untuk plugin. Hampir semua yang Anda lihat di Eclipse adalah hasil dari plugin yang dipasang di Eclipse, bukan Eclipse itu sendiri.

The .projectfile dikelola oleh platform inti Eclipse, dan tujuannya adalah untuk menggambarkan proyek dari generik, plugin-independen Eclipse pandangan. Apa nama proyeknya? apa proyek lain di ruang kerja yang dimaksud? Apa pembangun yang digunakan untuk membangun proyek? (ingat, konsep "build" tidak berkaitan secara khusus dengan proyek Java, tetapi juga dengan jenis proyek lainnya)

The .classpathfile dikelola oleh fitur Eclipse JDT ( fitur = set plugin). JDT menyimpan banyak file "meta" dalam proyek (lihat .settingsdirektori di dalam proyek); yang .classpathberkas hanyalah salah satu dari mereka. Secara khusus, .classpathfile tersebut berisi informasi yang diperlukan fitur JDT untuk mengkompilasi proyek dengan benar: folder sumber proyek (yaitu, apa yang dikompilasi); folder keluaran (di mana untuk mengkompilasi ke ); dan entri classpath (seperti proyek lain di ruang kerja, file JAR sewenang-wenang pada sistem file, dan sebagainya).

Menyalin file seperti itu dari satu mesin ke mesin lainnya secara tidak sengaja mungkin berisiko. Sebagai contoh, jika file JAR sewenang-wenang ditempatkan di classpath (yaitu, file JAR yang terletak di luar ruang kerja dan dirujuk oleh penamaan jalur absolut), .classpathfile tersebut dibuat non-portabel dan harus dimodifikasi agar menjadi portabel. Ada beberapa praktik terbaik yang dapat diikuti untuk menjamin .classpathportabilitas file.


58
Sebagai orang luar untuk semua ini, ini semua diterjemahkan menjadi "Eclipse entah bagaimana berhasil membuat segala sesuatu tentang manajemen ruang kerja proyek menjadi seni hitam yang tidak dapat dipahami yang terlalu sulit untuk dipahami oleh siapa pun".
Warren P

1
@Isaac - Karena penasaran, kalau-kalau saya mengelola proyek saya dengan gitdan Maven, artinya saya punya (untuk kesederhanaan) folder "root" dari repositori (proyek) dengan satu srcfolder (memegang file "hello world" sederhana .java) dan proyek pox.xmlfile - jadi, Jika saya mengerti Anda secara benar, tidak ada kebutuhan (atau mungkin bahkan tentu tidak perlu) untuk menjaga: .project, .classpathdan .settings/file / folder serta dalam gitrepositori (yaitu-menambahkannya ke .gitignorefile untuk contoh)?
Guy Avraham

1
@GuyAvraham itu tergantung pada bagaimana Anda bekerja dengan Eclipse, dan khususnya - bagaimana Anda menginisialisasi ruang kerja. Apakah Anda memulai Eclipse di ruang kerja baru, dan kemudian menggunakan "impor proyek Maven yang ada"? jika demikian, maka Anda benar - tidak ada satu pun dari file ini yang benar-benar dibutuhkan, seperti m2eclipseyang Anda lakukan (atau, setidaknya, itulah yang seharusnya dilakukan).
Isaac

1
@buncis .projecttidak harus berada dalam .gitignore. Mengenai .classpath- jika Anda menggunakan m2eclipsedan ruang kerja Anda dikonfigurasi untuk memperbarui proyek Maven pada startup, maka Anda harus OK .classpathuntuk menambahkan .gitignoretetapi saya belum mengujinya sendiri.
Isaac

1
@uncunc hanya mengoreksi komentar terakhir itu. Rupanya, M2E melakukan pekerjaan yang sangat baik saat ini mengkonfigurasi proyek. Saya baru-baru ini bekerja pada basis kode sekitar 150 proyek Java dari semua jenis. Saya dihapus .projectdan .classpathdari mereka semua dan ditambahkan ke .gitignore. Semua berfungsi dengan baik dan saya tidak perlu terlalu sering memperbarui file-file ini di Git.
Isaac

37

.project

Ketika sebuah proyek dibuat di ruang kerja, file deskripsi proyek secara otomatis dihasilkan yang menggambarkan proyek. Satu-satunya tujuan dari file ini adalah untuk membuat proyek menggambarkan sendiri, sehingga proyek yang di-zip atau dilepaskan ke server dapat dibuat kembali dengan benar di ruang kerja lain.

.classpath

Classpath menentukan file sumber Java dan file sumber daya dalam suatu proyek yang dipertimbangkan oleh Java builder dan menentukan cara menemukan tipe di luar proyek. Java builder mengkompilasi file sumber Java ke folder output dan juga menyalin sumber daya ke dalamnya.


11

Referensi lengkap tidak tersedia untuk file yang disebutkan, karena dapat diperluas oleh berbagai plug-in.

Pada dasarnya, file proyek menyimpan pengaturan proyek, seperti pembangun dan pengaturan sifat proyek, sedangkan file .classpath menentukan classpath untuk digunakan selama menjalankan. File classpath berisi entri src dan target yang sesuai dengan folder dalam proyek; entri con digunakan untuk menggambarkan beberapa jenis entri "virtual", seperti lib JVM atau dalam kasus dependensi plug-in gerhana (dependensi proyek Java normal ditampilkan secara berbeda, menggunakan entri src khusus).


3

Dokumentasi gerhana ini memiliki rincian tentang markup dalam .projectfile: File deskripsi proyek

Ini menggambarkan .projectfile sebagai:

Ketika sebuah proyek dibuat di ruang kerja, file deskripsi proyek secara otomatis dihasilkan yang menggambarkan proyek. Tujuan dari file ini adalah untuk membuat proyek mendeskripsikan diri sendiri, sehingga proyek yang di-zip atau dilepaskan ke server dapat dibuat kembali dengan benar di ruang kerja lain. File ini selalu disebut ".project"

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.