У меня есть компонент OSGi, который выглядит так
@Activate
public MyComponent(@Reference OtherServiceA ref1, @Reference OtherServiceB ref2, @Reference OtherServiceC ref3) {
// remainder omitted
}
Аннотация @Reference
больше нигде в источнике не встречается.
Я использую gradle 5.6 с инструментами BND для создания банки:
// 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-ю указанную службу (имеются только первые две)
- Я получаю сообщение об ошибке, когда я ссылаюсь на третий компонент, например. по первому или второму варианту.
- Задачи compileJava работают хорошо - по-видимому, нет синтаксиса или нерешенной проблемы с импортом
- Я запустил Gradle с
clean
--refresh-dependencies
, ничего не получилось - Я очистил каталог ~/.gradle/caches (домашний путь Windows) безрезультатно.
- Это проблема «не работает на моей машине»: она работает с «точно» той же настройкой (тот же источник, та же версия ссылок, та же версия java и gradle) на других машинах.
Дополнительные сведения: - Я использую Java 1.8.151 (32-разрядная версия).