我有一个看起来像这样的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 / caches目录(Windows主目录),但无效
  • 这是“无法在我的机器上工作”的问题:它在其他机器上以“完全”相同的设置(相同的源,相同的引用版本,相同的Java和gradle版本)运行。

  • 更多细节:
    -我使用的是Java 1.8.151(32位)

    最佳答案

    您未指定biz.aQute.bnd.builder插件的版本。最新版本是5.0.1,它绝对支持OSGi DS 1.4注释,该注释支持构造函数注入(inject)。

    您也没有提及您使用的OSGi DS注释版本。您必须使用1.4版才能使用构造函数注入(inject)。

    至于为什么它只会在您的机器上失败,我不能说:-(

    关于java - OSGi:BND工具无法仅@Reference特定组件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60952246/

    10-15 10:14