php小编苹果在介绍最新的更新到2.x版本后,发现在OSGi包中使用"slf4j.api"需要扩展程序"osgi.serviceloader.processor"。这个更新对于使用这个扩展程序的开发者来说是一个重要的变化,因为它提供了更多的灵活性和便利性。这个更新的目的是为了帮助开发者更好地使用和管理slf4j.api,以提高程序的性能和稳定性。开发者们可以期待更多的更新和改进,以满足他们不断发展的需求。
问题内容
我在 github 上创建了一个小型重现器项目:slf4j-experiment
基本上我需要的是一个 osgi 包,其中一些代码使用 slf4j-api
。
示例:
import org.osgi.service.component.annotations.activate; import org.osgi.service.component.annotations.component; import org.osgi.service.component.annotations.deactivate; import org.slf4j.logger; import org.slf4j.loggerfactory; @component(service = someservice.class) public class someserviceimpl implements someservice { private static final logger log = loggerfactory.getlogger(someserviceimpl.class); @override public string doit(string first, string second) { log.info("someserviceimpl: doit(..)"); return operation(first, second); } static string operation(string first, string second) { return first + second; } @activate public void activate() { log.info("someserviceimpl: activate"); } @deactivate public void deactivate() { log.info("someserviceimpl: deactivate"); } }
在我的 build.gradle
中我有:
dependencies { compileonly 'org.osgi:osgi.annotation:7.0.0' compileonly 'org.osgi:org.osgi.service.component.annotations:1.3.0' implementation 'org.slf4j:slf4j-api:2.0.11' runtimeonly 'org.slf4j:slf4j-simple:2.0.11' // ... }
这与 slf4j 1.7.36
一起按预期工作
现在使用 slf4j 的 2.0.11
版本,由于服务提供者的使用,在 osgi 元数据中建模了新的约束,现在我陷入了困境:
Resolution failed. Capabilities satisfying the following requirements could not be found: [<<INITIAL>>] ⇒ osgi.identity: (osgi.identity=slf4j.simple) ⇒ [slf4j.simple version=2.0.11] ⇒ osgi.wiring.package: (&(osgi.wiring.package=org.slf4j)(version>=2.0.0)(!(version>=3.0.0))) ⇒ [slf4j.api version=2.0.11] ⇒ osgi.extender: (&(osgi.extender=osgi.serviceloader.processor)(version>=1.0.0)(!(version>=2.0.0)))
看来我需要一个额外的捆绑包,可能是由 spi fly 提供的,但我不明白如何......
解决方法
您的示例 声明:
slf4j.api;version='[1.7.36,1.7.37)',\ slf4j.simple;version='[1.7.36,1.7.37)'
(我不是 gradle + osgi + bnd 的粉丝)解析为 来自 maven 中心的 slf4j-api-1.7.36.jar。
这是正确的 osgi 捆绑包:
import-package: org.slf4j.impl;version=1.6.0 export-package: org.slf4j;version=1.7.36, org.slf4j.spi;version=1.7.36 , org.slf4j.helpers;version=1.7.36, org.slf4j.event;version=1.7.36
但是 slf4j-api-2.0.11.jar具有:
require-capability: osgi.extender;filter:="(&(osgi.extender=osgi.service loader.processor)(version>=1.0.0)(!(version>=2.0.0)))"
事实上 - 它满足 aries spi-fly:
Provide-Capability: osgi.extender;osgi.extender="osgi.serviceloader.re gistrar";version:Version="1.0",osgi.extender;osgi.extender="osgi.serv iceloader.processor";version:Version="1.0";uses:="org.apache.aries.sp ifly"
slf4j 在此提交中获取了这些标头(要求)。p>
spi-fly 是 osgi 对 java 服务加载器,动态转换捆绑包的代码,以便设置正确的线程上下文类加载器。 这实际上是 slf4j api 2 的一个适当的要求,因为它们从记录器实现的静态绑定切换到 然而,osgi 是一头顽强的野兽。对于日志记录,我推荐 pax logging 项目,它不仅导出正确的 /meta-inf/services/org 的服务发现.slf4j.spi.slf4jserviceprovider
服务。org.slf4j
包,而且还允许您动态配置日志记录后端并使用 osgi 配置管理对其进行配置。
以上是更新到 2.x 后,在 OSGi 包中使用'slf4j.api”需要扩展程序'osgi.serviceloader.processor”的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

SublimeText3 Linux新版
SublimeText3 Linux最新版

Dreamweaver Mac版
视觉化网页开发工具