gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 18:35:29 28 4
gpt4 key购买 nike

我正在尝试获取库 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因此尝试添加以下 bundle :

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

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

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

我还尝试了不同的启动级别和自动启动的实现。我重新捆绑了 JAR,没有可选的依赖项,但我仍然遇到问题,因为现在 MD5 哈希值已损坏。

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

最佳答案

解析:=可选表示当包解析时,它将要么访问该包,要么不访问该包。允许框架在不访问包的情况下解析包。如果 bundle 需要访问包,为什么要选择包的解析?

关于java.lang.NoClassDefFoundError : org/slf4j/LoggerFactory in OSGi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60062788/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com