套装-A:

FooA.java

package com.foo.a;

import com.foo.b.FooB;

class FooA {
    FooB b = new FooB();
}


捆绑包B:

FooB.java:

package com.foo.b;

import com.foo.c.FooC;

class FooB {

    public FooC foo() {
       ...
    }
}


套件C:
...

简而言之,我有3个捆绑包-A,B和C。

包A直接引用包B,包B引用C。
如您所见,FooA在FooB中没有使用返回FooC的方法,因此FooC在包A中没有直接引用。

为什么BND会将OSGi导入包包含到com.foo.c中呢?
我的理解方式-包A仅需要包B便能自行解决。另一方面,捆绑软件B需要C。但是,如果那里不使用A,为什么A要直接要求C?

最佳答案

我认为bnd会导入您所使用的类在外部可见的所有类。在使用FooB类时,您可能需要访问它可能需要作为参数或作为结果返回的所有类。

如果要避免依赖关系,可以创建一个仅显示您真正需要的方法的接口。然后,可以使用捆绑软件B中的该接口创建服务,并且仅使用捆绑软件A中的接口访问该服务。

10-05 19:11