簡體   English   中英

OSGi:BND 工具僅無法@Reference 特定組件

[英]OSGi: BND tools fail to @Reference only a specifc component

我有一個看起來像這樣的 OSGi 組件

    @Activate
    public MyComponent(@Reference OtherServiceA ref1, @Reference OtherServiceB ref2, @Reference OtherServiceC ref3) {
         // remainder omitted
     }

@Reference注釋不會出現在源中的其他任何地方。

我使用 gradle 5.6 和 BND 工具來構建 jar:

// file: build.gradle
plugins {
    id 'biz.aQute.bnd.builder'
}

運行 jar 任務會導致以下錯誤:

> Task :my.pro.ject:jar FAILED
error  : In component my.pro.ject.mypackage.MyComponent, @Reference cannot be used for method parameters

FAILURE: Build failed with an exception.

和相應的堆棧跟蹤

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':my.pro.ject:jar'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$3.accept(ExecuteActionsTaskExecuter.java:166)
[...]
Caused by: org.gradle.api.GradleException: Bundle my.pro.ject-2.0.0-SNAPSHOT.jar has errors
        at aQute.bnd.gradle.BundleTaskConvention.failBuild(BundleTaskConvention.groovy:310)
        at aQute.bnd.gradle.BundleTaskConvention$_buildBundle_closure6$_closure7.doCall(BundleTaskConvention.groovy:294)
        at aQute.bnd.gradle.BundleTaskConvention$_buildBundle_closure6.doCall(BundleTaskConvention.groovy:200)
        at org.gradle.util.ClosureBackedAction.execute(ClosureBackedAction.java:71)
[...]

我認為錯誤消息具有誤導性:以下代碼運行良好:

    @Activate
    public MyComponent(@Reference OtherServiceA ref1, @Reference OtherServiceB ref2) { // just removed ref3
         // remainder omitted
     }

  • 刪除第三個引用的服務時沒有出現錯誤(只有前兩個)
  • 當我引用第三個組件時,例如在第一個或第二個選項中,我確實收到錯誤消息。
  • 任務 compileJava 運行良好 - 顯然沒有語法或未解決的導入問題
  • 我用clean --refresh-dependencies運行 gradle ,沒有任何效果
  • 我清除了 ~/.gradle/caches 目錄(Windows 主路徑),沒有效果
  • 這是一個“在我的機器上不起作用”的問題:它在其他機器上以“完全”相同的設置(相同的源、相同版本的引用、相同的 java 和 gradle 版本)運行。

更多詳細信息: - 我使用的是 Java 1.8.151(32 位)

您沒有指定biz.aQute.bnd.builder插件的版本。 最新版本是5.0.1 ,它肯定支持支持構造函數注入的 OSGi DS 1.4 注釋。

您也沒有提到您使用的是哪個版本的 OSGi DS 注釋。 您必須使用 1.4 版才能使用構造函數注入。

至於為什么它只在你的機器上失敗,我不能說:-(

我遇到了同樣的問題,但是在使用非常古老的 Java 8 (1.8.0_60) 構建的項目中使用 bnd-maven-plugin (5.2.0) 時。 更新到(更多)最近的東西(bnd-maven-plugin 到 5.3.0 或 java 到 1.8.0_162)為我解決了這個問題。

我連接了調試器,並注意到在處理 @Deactivate 注釋方法時產生了錯誤。 我沒有進一步調查為什么來自構造函數的參數被評估為 deactivate 方法的一部分,以及為什么在更新 jdk 時這個問題消失了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM