[英]Hibernate - java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
[英]java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory in OSGi
我试图让库BioJava在 OSGi 上下文中工作。
为了让 JAR 进入 OSGi 上下文,我使用了 Maven 插件p2-maven-plugin ,它生成一个文件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 代理替换那个愚蠢的依赖项,这样我就不再需要损坏的依赖项了?
resolution:=optional
意味着当包解析时,它要么可以访问包,要么不能。 允许框架在不访问包的情况下解析包。 如果捆绑包需要访问包,为什么要将包的解析设为可选?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.