2014-01-14 8 views
0

다른 패키지의 수퍼 클래스를 참조하는 하위 클래스가 있습니다. 번들을 참조하고 서브 클래스 화하려면 두 패키지를 모두 내 보내야하나요?OSGi superclass visibility

예 :

BundleOne exports packageB 
packageA: interface i 
packageB: abstract class B implements i 

BundleTwo imports packageB 
packageC: class C extends B 

이 예는 나를 위해 작동하지 않으며, OSGi 프레임 워크는 packageA에 대한 누락 된 수입 패키지 제약에 대해 불평. 이 클래스는 C 클래스의 아무 곳에서나 참조하지 않기 때문에 이상하다고 생각합니다.

import 패키지 선언은 maven 플러그인에 의해 자동으로 생성되는 것으로 보입니다.이 플러그인은 백그라운드에서 bnd를 사용하고 있다고 생각합니다.

답변

1

네, 절대적으로 두 패키지를 모두 내 보내야합니다. 왜이게 이상하다고 생각하니? A 인터페이스 I을 참조하십시오. 이는 이고 I 인 클래스 B을 참조하기 때문입니다.

실제로 귀하의 클래스 CI입니다. 클래스를 생성 할 기회를 얻으려면 Java 가상 시스템이 전체 수퍼 클래스 계층을 볼 수 있어야합니다.

+0

네, 맞습니다. 나는 똑바로 생각하지 않았다. 나는 그것을 취한다. 수입품/수출품은 계층 구조만큼 높이 올라간다. – mhb

+0

예. 모든 수퍼 유형 및 선언 된 인터페이스는 유형의 공개 서명의 일부이기 때문입니다. 그것들은 사용 제한이있는 유형에 의해 "사용"됩니다. –

1

예, 모두 내보내기해야합니다. B의 클래스 정의에는 A에 대한 종속성이 있으므로 A가없는 B도 참조 할 수 없습니다.

에서 간단한 자바 패키지 A는 에 a.jar에있는 응용 프로그램과 B b.JAR가와 비슷한 것입니다. 런타임에 A.jar를 사용할 수 없다면 정의의 일부가 빠져 있기 때문에 B를 알 수 없습니다.