我们需要FindBugs JSR305作为依赖项,并将其作为包装好的 OSGi 包部署到Fuse 6.3.0。起初看起来一切都很好,组件运行良好。但重启后,许多依赖 javax.annoation API 的包不再启动。我们发现,Fuse 安装自带的 javax.annoation API Bundle 重启后并没有导出 javax.annoation 包。尽管 javax.annotation API 的包启动时没有错误并导出其他包。
RedHat Fuse 6.3.0.475 和相应的 Karaf 2.4.0.redhat-630475 会出现该错误。
我们已经尝试过来自 Maven Repository 的ServiceMix JSR305 Bundle,但它在 1.1.0 版本中导出 javax.annotation,我们需要 3.0.2 版本。也许这也是一个错误,因为我希望从捆绑版本 3.0.2_1 导出 javax.annotation 3.0.2。
Manifest-Version: 1.0
Bnd-LastModified: 1493877706145
Build-Jdk: 1.8.0_111
Built-By: jbonofre
Bundle-Description: This OSGi bundle wraps jsr305 1.1.0 jar file.
Bundle-DocURL: http://www.apache.org/
Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
Bundle-ManifestVersion: 2
Bundle-Name: Apache ServiceMix :: Bundles :: jsr305
Bundle-SymbolicName: org.apache.servicemix.bundles.jsr305
Bundle-Vendor: The Apache Software Foundation
Bundle-Version: 3.0.2.1
Created-By: Apache Maven Bundle Plugin
Export-Package: javax.annotation;version="1.1.0";uses:="javax.annotation.meta",javax.annotation.concurrent;version="1.1.0",javax.annotation.meta;version="1.1.0";uses:="javax.annotation"
Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.5))"
Tool: Bnd-3.2.0.201605172007
复制
设置新的 Fuse 6.3.0 安装。使用“pacakges:exports | grep javax.annoation;” 您可以发现 javax.annoation 是从 System Bundle 导出的 1.0.0 版本和 javax.annoation API 的 1.2.0 版本。
JBossFuse:karaf@root> packages:exports | grep javax.annotation\;
0 javax.annotation; version=1.0.0
60 javax.annotation; version=1.2.0
现在将FindBugs JSR305作为打包的 OSGi 包安装到实例。现在有三个 javax.annotation 包的导出,包括 FindBugs JSR305 包的 3.0.2 版,并且一切正常。
JBossFuse:karaf@root> packages:exports | grep javax.annotation\;
0 javax.annotation; version=1.0.0
60 javax.annotation; version=1.2.0
第294章 版本=3.0.2
现在通过管理脚本或“dev:restart”重新启动实例,在实例再次启动后,您将看到一些损坏的包,因为 javax.annoation API 停止导出 javax.annotation 包的 1.2.0 版本。
JBossFuse:karaf@root> packages:exports | grep javax.annotation\;
0 javax.annotation; version=1.0.0
第294章 版本=3.0.2
如果您尝试使用全新的 Fuse 7.0.0 安装,它与 Karaf 4.2.0 一起运行并且仍然包含 javax.annotation API,则不会发生错误。它也适用于 Fuse 7.7.0,但不再包含 javax.annotation API,java.annotation 包仅从 Sytem Bundle 导出。