首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory in OSGi

java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory in OSGi
EN

Stack Overflow用户
提问于 2020-02-04 17:38:09
回答 1查看 730关注 0票数 1

我试图让库BioJava在OSGi上下文中工作。

为了使JAR进入OSGi上下文,我使用了Maven插件P2-maven-插件,它生成一个文件Manifest.MF,与我面临的例外相关的部分是:

代码语言:javascript
复制
Bundle-SymbolicName: org.biojava.core
Bundle-Version: 5.3.0
Import-Package: [snip],
 org.slf4j;resolution:=optional,
 [snap]

在我看来没问题。然而,当我访问一个使用slf4j的类时,我会得到标题异常:

代码语言:javascript
复制
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-测井-log4j2

不过,这两种方法都没有用。也许OSGi容器有问题,但是slf4j JAR在导出包方面有包信息,所以我假设这些工作。而且BioJava JAR有一个导入包,所以我不知道它为什么找不到这个类。

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

我还为实现尝试了不同的启动级别和自动启动。我重新打包了JAR,没有可选的依赖项,但是我一直有问题,因为现在MD5哈希已经崩溃了。

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

EN

回答 1

Stack Overflow用户

发布于 2020-02-04 21:50:40

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60062788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档