Có gì trong một tệp. Classpath / .project của Eclipse?


143

Gần đây chúng tôi đã gặp sự cố với một dự án Eclipse cho một trong các thành viên trong nhóm của chúng tôi. Tomcat đã không triển khai JAR của ứng dụng.

Cuối cùng chúng tôi nhận thấy .classpathtệp Eclipse không giống với các thành viên trong nhóm nơi dự án ổn. Chúng tôi đã thay thế .classpathtệp bằng một từ một dự án vẫn ổn và việc triển khai Tomcat đã hoàn tất.

Chỉ cần tò mò và để biết những gì sẽ nhìn trong tương lai nếu có gì đó không ổn, những gì bên trong .classpath.projectcác tập tin. Tôi có thể thêm gì vào đó, tất cả có nghĩa là gì?


Là tệp. Classpath dành riêng cho Java? Câu hỏi này có vẻ chủ yếu là ngôn ngữ, nhưng từ câu trả lời này có vẻ như nó chỉ liên quan đến Java.
Casey Kuball

Câu trả lời:


144

Eclipse là một môi trường thời gian chạy cho các plugin. Hầu như mọi thứ bạn thấy trong Eclipse là kết quả của các plugin được cài đặt trên Eclipse, chứ không phải là chính Eclipse.

Các .projecttập tin được duy trì bởi lõi nền tảng Eclipse, và mục tiêu của nó là để mô tả dự án từ một plugin độc lập, xem Eclipse generic. Tên dự án là gì? những dự án khác trong không gian làm việc mà nó đề cập đến là gì? Các nhà xây dựng được sử dụng để xây dựng dự án là gì? (hãy nhớ rằng khái niệm "xây dựng" không liên quan cụ thể đến các dự án Java, mà còn liên quan đến các loại dự án khác)

Các .classpathtập tin được duy trì bởi tính năng của Eclipse JDT ( tính năng = tập các plugins). JDT chứa nhiều tệp "meta" như vậy trong dự án (xem .settingsthư mục bên trong dự án); các .classpathtập tin chỉ là một trong số họ. Cụ thể, .classpathtệp chứa thông tin mà tính năng JDT cần để biên dịch đúng dự án: các thư mục nguồn của dự án (nghĩa là phải biên dịch cái gì ); các thư mục đầu ra (nơi biên dịch sang ); và các mục nhập đường dẫn (chẳng hạn như các dự án khác trong không gian làm việc, các tệp JAR tùy ý trên hệ thống tệp, v.v.).

Sao chép một cách mù quáng các tập tin như vậy từ máy này sang máy khác có thể có rủi ro. Ví dụ: nếu các tệp JAR tùy ý được đặt trên đường dẫn lớp (nghĩa là các tệp JAR nằm ngoài không gian làm việc và được gọi bằng cách đặt tên đường dẫn tuyệt đối), .classpathtệp được hiển thị không di động và phải được sửa đổi để được xách tay. Có một số thực tiễn tốt nhất có thể được thực hiện để đảm bảo .classpathtính di động của tệp.


57
Là một người ngoài cuộc đối với toàn bộ điều này, tất cả điều này chuyển thành "Eclipse bằng cách nào đó quản lý để biến mọi thứ về quản lý không gian làm việc của dự án thành một nghệ thuật đen khó hiểu mà quá khó để mọi người có thể hiểu được".
Warren P

1
@Isaac - Vì tò mò, trong trường hợp tôi quản lý dự án của mình gitMaven, có nghĩa là tôi có (để đơn giản) thư mục "root" của kho lưu trữ (dự án) với một srcthư mục duy nhất (chứa .javatệp "hello world" đơn giản ) và của dự án pox.xmltập tin - vì vậy, Nếu tôi hiểu bạn một cách chính xác, không có nhu cầu (hoặc thậm chí có nhất thiết không cần) để giữ: .project, .classpath.settings/các tập tin / thư mục cũng như trong các gitkho lưu trữ (tức là-thêm chúng vào .gitignoretập tin chẳng hạn)?
Guy Avraham

1
@GuyAvraham phụ thuộc vào cách bạn làm việc với Eclipse và cụ thể - cách bạn khởi tạo một không gian làm việc. Bạn có khởi động Eclipse trên một không gian làm việc mới và sau đó sử dụng "nhập các dự án Maven hiện có" không? nếu vậy, thì bạn đã đúng - không có tệp nào trong số này thực sự cần thiết, vì m2eclipsenó quan tâm đến điều đó cho bạn (hoặc, ít nhất, đó là những gì nó phải làm).
Isaac

1
@buncis .projectkhông nên ở .gitignore. Về .classpath- nếu bạn sử dụng m2eclipsevà không gian làm việc của bạn được cấu hình để cập nhật các dự án Maven khi khởi động, thì bạn sẽ ổn khi thêm .classpathvào .gitignorenhưng tôi đã không tự mình kiểm tra nó.
Isaac

1
@buncis chỉ cần sửa bình luận cuối cùng đó. Rõ ràng, M2E hiện đang làm rất tốt công việc cấu hình các dự án. Gần đây tôi đã làm việc trên một cơ sở mã của khoảng 150 dự án Java thuộc mọi loại. Tôi loại bỏ .project.classpathtừ tất cả chúng và thêm vào .gitignore. Tất cả đều hoạt động tốt và tôi không cần phải cập nhật liên tục các tệp này trong Git quá thường xuyên.
Isaac

37

.project

Khi một dự án được tạo trong không gian làm việc, một tệp mô tả dự án sẽ tự động được tạo để mô tả dự án. Mục đích duy nhất của tệp này là làm cho dự án tự mô tả, để một dự án được nén hoặc phát hành đến một máy chủ có thể được tạo lại chính xác trong không gian làm việc khác.

.classpath

Classpath chỉ định các tệp nguồn Java và các tệp tài nguyên trong một dự án được xem xét bởi trình xây dựng Java và chỉ định cách tìm các loại bên ngoài dự án. Trình xây dựng Java biên dịch các tệp nguồn Java vào thư mục đầu ra và cũng sao chép các tài nguyên vào nó.


11

Tham chiếu đầy đủ không có sẵn cho các tệp được đề cập, vì chúng có thể mở rộng bằng nhiều trình cắm khác nhau.

Về cơ bản, các tệp .project lưu trữ các cài đặt dự án, chẳng hạn như các cài đặt bản chất của trình xây dựng và dự án, trong khi các tệp. Classpath xác định đường dẫn lớp để sử dụng trong khi chạy. Các tệp classpath chứa src và các mục tiêu tương ứng với các thư mục trong dự án; các mục con được sử dụng để mô tả một số loại mục "ảo", chẳng hạn như lib JVM hoặc trong trường hợp phụ thuộc trình cắm nhật thực (phụ thuộc dự án Java thông thường được hiển thị khác nhau, sử dụng mục nhập src đặc biệt).


3

Tài liệu nhật thực này có chi tiết về các đánh dấu trong .projecttệp: Tệp mô tả dự án

Nó mô tả các .projecttập tin như:

Khi một dự án được tạo trong không gian làm việc, một tệp mô tả dự án sẽ tự động được tạo để mô tả dự án. Mục đích của tệp này là để làm cho dự án tự mô tả, để một dự án được nén hoặc phát hành đến một máy chủ có thể được tạo lại chính xác trong không gian làm việc khác. Tập tin này luôn được gọi là ".project"

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.