[java.lang.NoClassDefFoundError:OSGi中的org / slf4j / LoggerFactory

问题描述 投票:0回答:1

我正在尝试让库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。我检查了the documentation或SO问题ClassNotFoundException: org.slf4j.LoggerFactory之类的网站,因此尝试添加以下捆绑包:

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

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

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

有人设法使slf4j在OSGi中工作吗?还是失败了,有什么办法可以用某种Java代理替换那个愚蠢的依赖关系,这样我就不再需要打破的依赖关系了?

java osgi slf4j
1个回答
0
投票

resolution:=optional表示当分发包解析时,它将无法访问该软件包。允许框架解析包而不访问包。如果捆绑软件需要访问软件包,为什么要使软件包的分辨率为可选?

© www.soinside.com 2019 - 2024. All rights reserved.