我通过项目的目标平台定义(即另一个带有 的 Maven 项目)在我的一个包(Maven )中使用org.slf4j:slf4j-api:1.7.30
和ch.qos.logback:logback-classic:1.2.3。<packaging>eclipse-plugin
<packaging>eclipse-target-definition
slf4j-api
JARMANIFEST.MF
包含:
...
Import-Package: org.slf4j.impl;version=1.6.0
logback-classic
JAR 还包含该包及其org.slf4j.impl
包含MANIFEST.MF
:
...
Export-Package: ...
....................., org.slf4j.impl;versi
on="1.7.25";uses:="org.slf4j,org.slf4j.spi"
...
如果我添加:
Import-Package: ...
...
org.slf4j,
ch.qos.logback.classic,
org.slf4j.impl
到我的包的 MANIFEST.MF` 只有前两个被解决。对于后者 Eclipse 显示错误:
捆绑“ch.qos.logback.slf4j”导出包“org.slf4j.impl”未解决
并且ch.qos.logback.classic_1.2.3.v20200428-2012.jar
在我的包的Plugin-Dependencies文件夹中仅显示ch.qos.logback.classic
包及其子包。
主要问题:
- 为什么
org.slf4j.impl
不被视为已导出,因此无法解决?
小问题:
Bundle-SymbolicName
错误消息中的 来自哪里?目标平台
v20200428-2012
定义中logback-classic
的 JAR的限定符从何而来?它不包含这个,而只是.MANIFEST.MF
Bundle-Version: 1.2.3
为什么要
slf4j-api
进口org.slf4j.impl
?不应该依赖 API 的实现,反之亦然?
更新
我找到了 2. 和 3. 的答案(不是第一次在编写 SO 问题时发生这种情况:):它来自 Eclipse 本身:https ://ftp.fau.de/eclipse/releases/2021-03/202103171000/plugins /
这也导致了 1. 的答案:我实际上并没有使用原始slf4j
和logback
JAR,而是来自 Eclipse 和ch.qos.logback.slf4j
's 的那些MANIFEST.MF
包含:
...
Export-Package: org.slf4j.impl;x-internal:=true;version="1.7.30";uses:
="org.slf4j,org.slf4j.spi"
...
那么 5. 如何让包org.slf4j.impl
导出/导入呢?