搜尋
首頁Java更新到 2.x 後,在 OSGi 套件中使用'slf4j.api”需要擴充功能'osgi.serviceloader.processor”

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中文網其他相關文章!

陳述
本文轉載於:stackoverflow。如有侵權,請聯絡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.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具