2012-06-26 1 views
0

플러그인의 "복제본"을 만들고 싶습니다. 동시에 플러그인 ID를 변경하여 클래스를 변경해야합니까? Eclipse가 각 플러그인에 대해 다른 클래스 경로를 사용하거나 단일 힙의 번들에서 모든 클래스를로드 할 수 있습니까?다른 ID를 가진 Eclipse 플러그인에서 동일한 패키지 및 클래스 이름을 사용할 수 있습니까?

+0

당신은 이것을하지 않을 것입니다. 패키지는 이유가 있기 때문에 존재합니다 : 서로 다른 장소에서 같은 이름의 클래스를 구분할 수 있습니다. 동일한 패키지/클래스 이름 조합을 사용하면 혼동을 일으키거나 엉망이 될 수 있습니다. – WhyNotHugo

답변

3

이것이 작동하는지 여부는 질문에 지정하지 않은 요소에 따라 다르므로 Eclipse에서 클래스 로딩이 작동하는 방식을 설명하고 결정할 수 있습니다.

이클립스는 최상위 OSGi에서 실행됩니다. 각 Eclipse 플러그인은 OSGi 번들입니다. 각 번들에는 고유 한 클래스 로더가 있습니다. 이 클래스 로더는 번들에 포함 된 클래스와 번들의 종속성에있는 클래스를 확인합니다. 번들이 의존성을 지정하는 두 가지 방법이있다. 두 방법 모두 번들의 MANIFEST.MF 파일에있는 항목을 통해 작동합니다. 하나의 방법은 Require-Bundle 구조를 사용하여 다른 모든 번들에 의존하는 것입니다. 이 방법을 사용하면 번들은 종속성이 Export-Package를 통해 내보내는 모든 패키지를 볼 수 있습니다. 두 번째 방법은 Import-Package를 사용하는 것입니다. 이 방법을 사용하면 번들은 번들이 Export-Package를 통해 내보내는 패키지를 찾습니다. 또한 제작자 측에서 번들과 패키지를 버전 화하고 종속성이 끝날 때 버전을 제한 할 수 있습니다.

그래서,이 지식으로 무장 한, 당신은
  1. 당신이 수출 패키지를 통해 모든 패키지를 수출 복제하는 번들인가 ... 자신에게 이런 질문을 할 필요가있다. 그렇지 않으면 괜찮을 것입니다.

  2. 현재 번들은 원래 번들을 지정하며 Require-Bundle을 통해 복제본을 지정합니까? 당신이 피하려고하는 것은 하나의 번들이 Bundle.Original과 Bundle.Clone 둘 다 Require-Bundle을 지정하는 상황입니다. 이러한 준비가 필요하면 복제 된 패키지의 이름을 바꾸어야합니다.

  3. 확인해야 할 마지막 사항은 모든 번들이 내 보낸 내보내기 패키지에서 Import-Package를 사용하는지 여부입니다. 그렇다면 원래 패키지로 버전을 변경하고 복제를 다르게해야합니다. Export-Package 지시문에서이 문제가 발생합니다. Import-Package 지시문에서 버전 제한을 신중하게 지정하여 원본 또는 복제본의 버전과 일치하도록해야합니다. 패키지를 버전 화하고 가져 오기를 제한하지 않으면 런타임에 어떤 버전이 발견되는지에 따라 임의의 동작이 발생합니다. 다시 말해, 단일 다운 스트림 번들이 원래 패키지와 복제 된 패키지를 모두 가져와야하는 경우 복제 된 패키지의 이름을 바꿔야합니다.

2

동일한 클래스 이름을 가진 다른 플러그인을 가질 수 있지만 모든 플러그인은 클래스 로더와 클래스 경로가 다르지만 실제로 JVM에서는 동일한 이름의 두 클래스를 실제로로드 할 수 없습니다.

관련 문제