我们需要将FindBugs JSR305作为依赖项,并将其作为包装的OSGi包部署到保险丝6.3.0中。一开始,一切看起来都很好,组件运行良好。但是在重新启动之后,许多依赖于javax.annoation API的包不再启动。我们发现,Fuse安装附带的javax.annoation API在重启后不会导出包javax.annoation。尽管javax.annotation API的包启动时没有出现错误,并且导出了其他包。
该错误发生在RedHat Fuse 6.3.0.475和相应的Karaf2.4.0.redhat-630475中。
我们已经尝试过来自Maven Repository的ServiceMix JSR305束,但是它在1.1.0版本中导出了javax.annotation,我们需要3.0.2版本。也许这也是一个错误,因为我希望从包版本3.0.2_1导出一个3.0.2_1 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的1.0.0版本中导出的,而在1.2.0版本中是从javax.annoation API导出的。
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.0294 javax.annotation;version=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.0294 javax.annotation;version=3.0.2
如果您尝试使用一个新的Fuse 7.0.0安装,它使用Karaf4.2.0运行,并且仍然包含javax.annotation API,则不会发生错误。它也适用于Fuse 7.7.0,但是不再包含javax.annotation API,java.annotation包只是从Sytem导出。
发布于 2020-10-28 13:54:29
我也遇到了同样的问题(是的,在JBoss Fuse中)。在升级到动物园管理员3.4.14之后,我们在mvn dependency:tree中实现了这一点
[INFO] | \- org.apache.zookeeper:zookeeper:jar:3.4.14:compile
[INFO] | +- org.slf4j:slf4j-log4j12:jar:1.7.10:compile
[INFO] | +- com.github.spotbugs:spotbugs-annotations:jar:3.1.9:compile
[INFO] | | \- com.google.code.findbugs:jsr305:jar:3.0.2:compileFindbug库被破坏了:
JBossFuse:karaf@root> install mvn:com.google.code.findbugs/jsr305/3.0.2
Bundle ID: 295
JBossFuse:karaf@root> headers 295
FindBugs-jsr305 (295)
---------------------
Archiver-Version = Plexus Archiver
Created-By = Apache Maven Bundle Plugin
Manifest-Version = 1.0
Bnd-LastModified = 1490936130302
Build-Jdk = 1.8.0_101
Built-By = lan
Tool = Bnd-2.1.0.20130426-122213
Bundle-License = http://www.apache.org/licenses/LICENSE-2.0.txt
Bundle-ManifestVersion = 2
Bundle-SymbolicName = org.jsr-305
Bundle-Version = 3.0.2
Bundle-Name = FindBugs-jsr305
Bundle-Description = JSR305 Annotations for Findbugs
Export-Package =
javax.annotation;uses:=javax.annotation.meta;version=3.0.2,
javax.annotation.concurrent;version=3.0.2,
javax.annotation.meta;uses:=javax.annotation;version=3.0.2因为它以不存在的版本导出javax.annotation包。如果您检查JSR 250,JavaTM平台的通用注释,它的版本应该是1.3,并且它与来自Maven Central的版本相匹配。
在我们的示例中,我们已经将activemq更改为导入javax.annotation;version="[1,4)",而不是只导入javax.annotation,因此maven-bundle插件不会生成糟糕的javax.annotation;version="[3,4)"。
但是国际海事组织,发现错误不应该使用javax.annotation软件包.
https://stackoverflow.com/questions/64568455
复制相似问题