目录
问题内容
解决方法
首页 Java 更新到 2.x 后,在 OSGi 包中使用'slf4j.api”需要扩展程序'osgi.serviceloader.processor”

更新到 2.x 后,在 OSGi 包中使用'slf4j.api”需要扩展程序'osgi.serviceloader.processor”

Feb 10, 2024 pm 09:12 PM

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 的一个适当的要求,因为它们从记录器实现的静态绑定切换到 /meta-inf/services/org 的服务发现.slf4j.spi.slf4jserviceprovider服务。

然而,osgi 是一头顽强的野兽。对于日志记录,我推荐 pax logging 项目,它不仅导出正确的 org.slf4j 包,而且还允许您动态配置日志记录后端并使用 osgi 配置管理对其进行配置。

以上是更新到 2.x 后,在 OSGi 包中使用'slf4j.api”需要扩展程序'osgi.serviceloader.processor”的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)