OSGi: инструментам BND не удается @Reference только определенный компонент c - PullRequest
0 голосов
/ 31 марта 2020

У меня есть компонент 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
     }

  • Я не получаю сообщение об ошибке при удалении 3-й службы, на которую есть ссылки (только первые два)
  • Я получаю сообщение об ошибке, когда ссылаюсь на третий компонент, например, при первом или втором параметре.
  • Компиляция задач Java работает хорошо - очевидно, нет синтаксиса или нерешена проблема импорта
  • Я запустил gradle с clean --refresh-dependencies ничего не работает
  • Я очистил каталог ~ / .gradle / caches (Windows home path), без эффекта
  • Это "не работает" на моей машине "проблема: он работает с" точно "той же настройкой (тот же источник, тот же V выбор ссылок, такой же java и версия Gradle) на других машинах.

Дополнительная информация: - Я использую Java 1.8.151 (32-разрядная версия)

1 Ответ

0 голосов
/ 31 марта 2020

Вы не указываете версию для плагина biz.aQute.bnd.builder. Последний выпуск - 5.0.1, который определенно поддерживает аннотации OSGi DS 1.4, поддерживающие внедрение конструктора.

Вы также не упоминаете, какую версию аннотаций OSGi DS вы используете. Вы должны использовать версию 1.4, чтобы использовать инжектор конструктора.

Что касается того, почему это не работает только на вашем компьютере, я не могу сказать: - (

...