maven-bundle-plugin 创建意外的 Import-Package 内容
maven-bundle-plugin Creates unexpected Import-Package content
我使用 maven-bundle-plugin
构建我所有的包,在使用 pax:provision
进行一些测试后,我发现它在所有包上创建了一个 Import-Package=org.osgi.framework;version="[1.8,0)"
并且在安装包时Felix 然后因为 org.osgi.framework.BundleException: Unresolved constraint in bundle com.domain.mybundle [55]: Unable to resolve 55.0: missing requirement
[55.0] osgi.wiring.package; (&(osgi.wiring.package=org.osgi.framework)(version>=1.8.0)(!(version>=2.0.0)))
.
我所有的包都没有解决
为什么 maven-bundle-plugin
如果我不直接依赖于那个包,为什么要创建这个头文件。我还尝试添加依赖项:
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.framework</artifactId>
<version>4.6.0</version>
</dependency>
而且它仍然使用1.8.0
版本。知道为什么吗?
更新
再次检查,捆绑包确实使用了 Activator 中的 org.osgi.framework
。但是这个 class org.osgi.framework.BundleActivator
来自捆绑包:
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.core</artifactId>
<version>4.3.1</version>
<scope>provided</scope>
<optional>true</optional>
</dependency>
那么,为什么 maven-bundle-plugin
不使用版本 4.3.1
而不是 1.8.0
?在其他包中,它使用版本 1.6.2
.
更新 20-3-2015
这是我执行后收到的异常 mvn pax:provision
org.osgi.framework.BundleException: Unresolved constraint in bundle org.classdomain.per
sistence [47]: Unable to resolve 47.0: missing requirement[47.0] osgi.wiring.package;
(&(osgi.wiring.package=org.osgi.framework)(version>=1.8.0)(!(version>=2.0.0)))ERROR:
Bundle org.classdomain.persistence [47] Error starting file:bundles/org.classdomain.per
sistence_0.1.0.jar (org.osgi.framework.BundleException: Unresolved constraint in bundle
org.classdomain.persistence [47]: Unable to resolve 47.0: missing requirement [47.0] o
sgi.wiring.package; (&(osgi.wiring.package=org.osgi.framework)(version>=1.8.0)(!(versio
n>=2.0.0))))
at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4002)
at org.apache.felix.framework.Felix.startBundle(Felix.java:2045)
at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1299)
at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:304)
at java.lang.Thread.run(Thread.java:745)
当然,这个异常似乎只在使用 mvn pax:provision
时发生,如果我在独立的 Felix 实例中安装相同的包,那么一切都会按预期工作。
Import-Package 语句是根据您使用的库中定义的包版本构建的。在您的情况下,您依赖于 org.apache.felix.framework 它在其清单中定义了这些导出(例如 org.osgi.framework 版本 1.8)。
如果您只依赖于 org.osgi.core 4.3.1,那么包 org.osgi.framework 应该定义为 1.6 版。所以这应该有效。
我使用 maven-bundle-plugin
构建我所有的包,在使用 pax:provision
进行一些测试后,我发现它在所有包上创建了一个 Import-Package=org.osgi.framework;version="[1.8,0)"
并且在安装包时Felix 然后因为 org.osgi.framework.BundleException: Unresolved constraint in bundle com.domain.mybundle [55]: Unable to resolve 55.0: missing requirement
[55.0] osgi.wiring.package; (&(osgi.wiring.package=org.osgi.framework)(version>=1.8.0)(!(version>=2.0.0)))
.
为什么 maven-bundle-plugin
如果我不直接依赖于那个包,为什么要创建这个头文件。我还尝试添加依赖项:
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.framework</artifactId>
<version>4.6.0</version>
</dependency>
而且它仍然使用1.8.0
版本。知道为什么吗?
更新
再次检查,捆绑包确实使用了 Activator 中的 org.osgi.framework
。但是这个 class org.osgi.framework.BundleActivator
来自捆绑包:
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.core</artifactId>
<version>4.3.1</version>
<scope>provided</scope>
<optional>true</optional>
</dependency>
那么,为什么 maven-bundle-plugin
不使用版本 4.3.1
而不是 1.8.0
?在其他包中,它使用版本 1.6.2
.
更新 20-3-2015
这是我执行后收到的异常 mvn pax:provision
org.osgi.framework.BundleException: Unresolved constraint in bundle org.classdomain.per
sistence [47]: Unable to resolve 47.0: missing requirement[47.0] osgi.wiring.package;
(&(osgi.wiring.package=org.osgi.framework)(version>=1.8.0)(!(version>=2.0.0)))ERROR:
Bundle org.classdomain.persistence [47] Error starting file:bundles/org.classdomain.per
sistence_0.1.0.jar (org.osgi.framework.BundleException: Unresolved constraint in bundle
org.classdomain.persistence [47]: Unable to resolve 47.0: missing requirement [47.0] o
sgi.wiring.package; (&(osgi.wiring.package=org.osgi.framework)(version>=1.8.0)(!(versio
n>=2.0.0))))
at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4002)
at org.apache.felix.framework.Felix.startBundle(Felix.java:2045)
at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1299)
at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:304)
at java.lang.Thread.run(Thread.java:745)
当然,这个异常似乎只在使用 mvn pax:provision
时发生,如果我在独立的 Felix 实例中安装相同的包,那么一切都会按预期工作。
Import-Package 语句是根据您使用的库中定义的包版本构建的。在您的情况下,您依赖于 org.apache.felix.framework 它在其清单中定义了这些导出(例如 org.osgi.framework 版本 1.8)。
如果您只依赖于 org.osgi.core 4.3.1,那么包 org.osgi.framework 应该定义为 1.6 版。所以这应该有效。