我试图让库BioJava在OSGi上下文中工作。
为了使JAR进入OSGi上下文,我使用了Maven插件P2-maven-插件,它生成一个文件Manifest.MF,与我面临的例外相关的部分是:
Bundle-SymbolicName: org.biojava.core
Bundle-Version: 5.3.0
Import-Package: [snip],
org.slf4j;resolution:=optional,
[snap]在我看来没问题。然而,当我访问一个使用slf4j的类时,我会得到标题异常:
java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at org.biojava.nbio.core.sequence.template.AbstractCompoundSet.<clinit>(AbstractCompoundSet.java:40)
at org.biojava.nbio.core.sequence.io.ABITrace.getSequence(ABITrace.java:179)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory cannot be found by org.biojava.core_5.3.0
at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:511)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:414)现在很容易在任何地方找到这个异常,因为很多人尝试(但失败)安装了slf4j。我检查了一些站点,如文献资料或SO问题ClassNotFoundException: org.slf4j.LoggerFactory,并因此尝试添加以下包:
不过,这两种方法都没有用。也许OSGi容器有问题,但是slf4j JAR在导出包方面有包信息,所以我假设这些工作。而且BioJava JAR有一个导入包,所以我不知道它为什么找不到这个类。
哦,我检查过了,LoggerFactory在slf4j-api中存在,所以也不是那样的。
我还为实现尝试了不同的启动级别和自动启动。我重新打包了JAR,没有可选的依赖项,但是我一直有问题,因为现在MD5哈希已经崩溃了。
有人设法让slf4j在OSGi工作吗?或者失败了,有没有办法用某种Java代理来代替那个愚蠢的依赖关系,这样我就不再需要这个破依赖了?
发布于 2020-02-04 21:50:40
resolution:=optional意味着当包解析时,它要么可以访问包,要么不能访问包。允许框架在不访问包的情况下解析包。如果包需要访问包,为什么要使包的解析成为可选的呢?
https://stackoverflow.com/questions/60062788
复制相似问题