2010-12-26 25 views
7

Khi xây dựng một plugin Eclipse (lato sensu) trong đó bao gồm nhiều plugins và một tính năng, tôi có hai cách phụ thuộc quy định cụ thể:Yêu cầu-Bundle và xuất nhập trọn gói so với feature.xml đòi hỏi

  • trong bản thân các plugin, sử dụng Require-BundleImport-Package trong META-INF/MANIFEST.MF;
  • trong tệp feature.xml từ đối tượng địa lý.

Theo hiểu biết của tôi, sẽ đủ để khai báo các phụ thuộc ở cấp thấp hơn, tức là trong các plugin. Tại sao chúng ta vẫn có cơ chế feature.xmlrequires?


Cập nhật: feature.xml description in the Eclipse Help

Trả lời

6

Việc phân loại cơ chế phụ thuộc tính năng thành tính năng là không chính xác.Mặc dù chắc chắn rằng với sự ra đời của p2, các phụ thuộc được chỉ định thông qua gói kê khai Yêu cầu-Gói hoặc Gói-Nhập khẩu sẽ được cài đặt, kết quả có thể không phải là những gì bạn mong đợi.

Xem xét trường hợp bạn đang xây dựng tiện ích mở rộng cho JDT. Giả sử bạn chỉ phụ thuộc vào api lõi JDT (không có phần mở rộng giao diện người dùng). Nếu bạn chỉ dựa vào phụ thuộc OSGi, khi plugin của bạn được cài đặt, p2 sẽ cài đặt gói lõi JDT một cách dè dặt, chứ không phải gói giao diện người dùng. Hoàn toàn tốt đẹp từ quan điểm OSGi, nhưng có lẽ không phải là những gì bạn dự định.

Tôi khuyên bạn nên gắn với tính năng nhập để mô tả các phụ thuộc cấp cao của bạn để đảm bảo rằng chúng được cài đặt đầy đủ. Chỉ dựa vào các phụ thuộc OSGi hoạt động tốt nhất cho các gói thả nổi miễn phí mà không phải là một phần của thứ gì đó lớn hơn cần được cài đặt như một đơn vị.

3

Eclipse tính năng là khái niệm để quản lý các plug-in để cung cấp trừu tượng cao hơn. Ví dụ, có hơn hai mươi trình cắm thêm cho các công cụ phát triển C/C++, vì vậy CDT có một số tính năng để sắp xếp các trình cắm thêm đó ở mức trừu tượng cao hơn, cho chức năng cốt lõi, ui, xây dựng và vân vân.

Nó cũng giúp đơn giản hóa quá trình cài đặt, người dùng chỉ cần biết tính năng hàng đầu (với tên thân thiện) của CDT. P2 API hoặc quản lý cài đặt cổ điển có thể tìm thấy các plugin và các tính năng phụ bao gồm cả tính năng hàng đầu, sau đó cài đặt chúng.

Tuy nhiên, tính năng KHÔNG thể giúp bạn tạo hệ thống mô-đun cao, vì bản thân nó không cung cấp bất kỳ chức năng nào. Nó không phải là một phần của đặc tả OSGi, nó được thừa kế từ Eclipse 2.x hoặc thậm chí là phiên bản cũ hơn.

là điều cần thiết của OSGi. Theo thông số kỹ thuật, bất kỳ gói nào không thể sử dụng các lớp khác ngoài việc tuyên bố dây với gói các lớp. Yêu cầu-bó và nhập khẩu-gói là những cách để tạo ra các dây.

Trong một từ ngắn, tính năng và plugin là các khái niệm hoàn toàn khác nhau. Tính năng bao gồm các trình cắm đang thực hiện những việc khác nhau so với Gói nhập gói.

Cập nhật:

này đòi hỏi thẻ của feature.xml là di sản. Mục đích là xác định các phụ thuộc của tính năng này với các trình cắm thêm/tính năng khác để giúp cập nhật trình quản lý để tìm các phụ thuộc bị hỏng khi cài đặt hoặc cập nhật tính năng đó. Nó xác định các phụ thuộc của tính năng đó với các trình cắm thêm khác, nhưng nó được sử dụng bởi trình quản lý cập nhật để cài đặt hoặc cập nhật. Import-Package của gói khai báo sự phụ thuộc thực tế và thực sự giữa gói của bạn và một mô-đun khác trong hệ thống OSGi.

Vì nhật thực sử dụng p2 làm trình quản lý cấp phép, bạn không cần khai báo thẻ 'require' trong tệp feature.xml của mình. P2 sẽ nhận ra sự phụ thuộc giữa gói của bạn và các mô-đun khác được khai báo bởi 'Gói-Nhập' hoặc 'Yêu cầu-Gói'. P2 sẽ không cài đặt hoặc cập nhật tính năng của bạn nếu bất kỳ sự phụ thuộc nào không được thỏa mãn.

+0

@Robert, Không chắc chính xác "feature.xml yêu cầu" là gì. Tuy nhiên phụ thuộc vào các tính năng không bao giờ ảnh hưởng đến ứng dụng của bạn, nó không phải là bắt buộc. Nó chỉ cung cấp một cách dễ dàng để tổ chức các gói, như hộp được gắn thẻ (tính năng và tên của nó) và trứng (bó). :) – Kane

+0

vui lòng xem cập nhật của tôi. –

+0

@Robert, xem cập nhật của tôi. – Kane

Các vấn đề liên quan