2012-03-19 24 views
8

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?

+0

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. –

+0

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

+2

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. –

Trả lời

6

Đảm bảo rằng bạn đang xuất các gói API để gói dịch vụ của bạn có thể liên kết với chúng.

Trong maven-bó-plugin của bạn cho gói API bạn nên có cái gì đó như:

  <configuration> 
       <instructions> 
        <Import-Package> 
         * 
        </Import-Package> 
        <Export-Package> 
         at.foobar.osgi.api.* 
        </Export-Package> 
       </instructions> 
      </configuration> 
+4

dude bạn vừa lưu tôi trở thành một người nghiện rượu. cảm ơn bạn rất rất nhiều! – Chris

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