簡體   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