Tôi đã tạo một Gói API nhỏ và gói dịch vụ nên sử dụng API.không thể bắt đầu gói osgi vì không thể giải quyết được nhập
Trong tập tin pom.xml maven của tôi, tôi đã thêm một dependecy cho bó api của tôi trong phiên bản chính xác như thế này:
<dependency>
<groupId>at.foobar.osgi.api</groupId>
<artifactId>foobarapi</artifactId>
<version>1.0</version>
</dependency>
Tôi đang sử dụng các plugin maven-bó để tạo ra các bó, và vì tôi đã sử dụng mvn clean install
để tạo tệp jar. Tệp kê khai trông giống như thế này (dịch vụ):
Manifest-Version: 1.0
Private-Package: at.foobar.osgi.producer
Built-By: foobar
Tool: Bnd-0.0.238
Bundle-Name: foobarproducer
Created-By: Apache Maven Bundle Plugin
Bundle-Version: 1.0
Build-Jdk: 1.6.0_26
Bnd-LastModified: 1332185439257
Bundle-ManifestVersion: 2
Bundle-Activator: at.foobar.osgi.producer.Activator
Import-Package: at.foobar.osgi.api,org.osgi.framework;version="1.4"
Bundle-SymbolicName: at.foobar.osgi.producer.foobarproducer
có vẻ ổn với tôi. Việc nhập là ở đó, vì vậy mọi thứ sẽ ổn.
bây giờ tôi đã bắt đầu lập và cài đặt API và gói sản xuất. Sau đó, tôi bắt đầu API, mà làm việc ra tốt đẹp. Nhưng khi tôi muốn bắt đầu Dịch vụ sản xuất, tôi nhận được lỗi này:
org.osgi.framework.BundleException: The bundle "at.foobar.osgi.producer.foobarproducer_1.0.0 [4]" could not be resolved. Reason: Missing Constraint: Import-Package: at.foobar.osgi.api; version="0.0.0"
Dường như khung không thể tìm thấy api, nhưng được cài đặt và bắt đầu?
Bạn đã bắn lên phân giao diện điều khiển và chạy 'gói at.foobar.osgi.api' để xác nhận gói được xuất bởi gói API của bạn? Nếu bạn nhận được danh sách các gói cuộn lớn, điều đó có nghĩa là không có gói xuất nào được đóng gói. Tôi cũng thử 'bundle [api-bundle-name]' để xem các gói mà gói API xuất ra - và xác nhận chính nó đã được bắt đầu. –
mh tôi quên xuất API ... nhưng những gì tôi không hiểu tại sao tôi cần xuất nó? Tôi đọc thông số Core và nghĩ rằng gói API sẽ không được xuất bởi vì nó được giải quyết bởi osgi? – reox
Gói cần phải được xuất bởi gói HOẶC được bao gồm trong gói (ví dụ: ir private-Package được liệt kê). Bạn đã làm không, do đó Bnd phát hiện nó như là một gói nhập khẩu. Có thể Xuất là chính xác vì nó giống như một API mà các gói khác có thể muốn sử dụng. –