tôi đang bắt đầu với OSGi, iPOJO và iPOJO Chú thích và cố gắng xây dựng một thành phần đơn giản để được triển khai trong Felix. Thật không may, tôi đang vấp phải nhiều vấn đề khác nhau khiến tôi mất nhiều giờ để giải quyết hoặc thậm chí tôi không thể giải quyết sau khi lãng phí giờ, như sau:Vấn đề với maven xây dựng OSGi bao gồm cả phụ thuộc
Tôi muốn sử dụng thư viện hiện có trong gói OSGi mà chúng tôi xây dựng bằng Maven. Thư viện hiện không phải là "OSGI-ified" và chúng tôi không dự định làm như vậy trong trung hạn. Do đó, tôi muốn bao gồm thư viện này và tất cả các phụ thuộc của nó trong gói, sử dụng ...:
<Embed-Dependency>*</Embed-Dependency>
<Embed-Transitive>true</Embed-Transitive>
Những gì tôi có bây giờ, là file pom.xml sau cho thành phần OSGi:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>foo</groupId>
<artifactId>samplecomponent</artifactId>
<packaging>bundle</packaging>
<version>0.0.1-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<source>1.6</source>
<target>1.6</target>
<compilerArguments>
<encoding>UTF-8</encoding>
</compilerArguments>
<showDeprecation>true</showDeprecation>
<verbose>true</verbose>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<version>2.3.6</version>
<configuration>
<instructions>
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
<Embed-Dependency>*</Embed-Dependency>
<Embed-Transitive>true</Embed-Transitive>
<Embed-Directory>lib</Embed-Directory>
<Export-Package>*</Export-Package>
<_exportcontents>*</_exportcontents>
</instructions>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-ipojo-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
<goals>
<goal>ipojo-bundle</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.ipojo.annotations</artifactId>
<version>1.8.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>foo</groupId>
<artifactId>mylibrary</artifactId>
<version>1.2.3</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
các file jar bó được xây dựng mà không cần bất kỳ vấn đề, nhưng khi triển khai và bắt đầu bó trên Apache Felix, tôi nhận được lỗi sau:
g! install file:/…/samplecomponent-0.0.1-SNAPSHOT.jar
Bundle ID: 8
g! start 8
org.osgi.framework.BundleException: Unresolved constraint in bundle samplecomponent [8]: Unable to resolve 8.0: missing requirement [8.0] osgi.wiring.package; (osgi.wiring.package=com.sun.jdmk.comm)
tôi đã thiết lập mức độ đăng nhập vào verbos cao nhất ity, không có thêm thông tin không may. Khi tôi loại bỏ mylibrary, gói được bắt đầu mà không có vấn đề gì.
Bất kỳ lời đề nghị đánh giá cao!
Cảm ơn bạn, đó là nói chung một con trỏ tốt. Tuy nhiên, sau khi thêm loại trừ, các phụ thuộc chưa được giải quyết khác xuất hiện. Những gì tôi đã làm bây giờ, được đặt phụ thuộc vào "tùy chọn": ' *; độ phân giải: = tùy chọn Import-Package>' Bây giờ tôi đã nhận nó hoạt động như mong đợi :) –
qqilihq
Hm, tốt để thấy rằng bạn đang giải quyết vấn đề, nhưng 'độ phân giải: = tùy chọn' chỉ nên được sử dụng trong những thời điểm tuyệt vọng: bạn làm suy yếu cơ chế giải quyết OSGi bằng cách làm điều đó, vì bạn đánh dấu _every_ import là tùy chọn. Tôi thích cái gì đó như '! Com.sun. *, *'. –
Được rồi, tôi sẽ ghi nhớ điều này trong tương lai, cảm ơn bạn đã cảnh báo. Nhưng trong ví dụ trên, vấn đề là, thiếu phụ thuộc mới chưa được giải quyết đã xuất hiện cho các không gian tên khác nhau, tạo ra một danh sách loại trừ rất lớn. – qqilihq