繁体   English   中英

java.lang.NoClassDefFoundError: OSGi 中的 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 之类的站点,因此尝试添加以下包:

  • slf4j-简单
  • slf4j-log4j12(加上 log4j 依赖项)
  • pax-logging-log4j2

然而,两者都没有奏效。 也许 OSGi 容器有问题,但是 slf4j JAR 具有开箱即用的导出包的捆绑信息,所以我假设这些工作正常。 而且 BioJava JAR 有一个导入包,所以我不知道为什么它无法找到该类。

哦,我检查过, LoggerFactory存在于 slf4j-api 中,所以也不是那样。

我还为实现尝试了不同的启动级别和自动启动。 我在没有可选依赖项的情况下重新捆绑了 JAR,但我一直遇到问题,因为现在 MD5 散列被破坏了。

有没有人设法让 slf4j 在 OSGi 中工作? 或者失败了,有没有办法用某种 Java 代理替换那个愚蠢的依赖项,这样我就不再需要损坏的依赖项了?

resolution:=optional意味着当包解析时,它要么可以访问包,要么不能。 允许框架在不访问包的情况下解析包。 如果捆绑包需要访问包,为什么要将包的解析设为可选?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM