제 3 자 플러그인을 기존 Eclipse RCP 응용 프로그램에 도입 했으므로 이제는 더 이상 작동하지 않습니다. 그것은 그것을 사용하고있는 것 같습니다 slf4j의 자신의 버전입니다. 이 문제를 어떻게 해결하고 제 3 자 항아리에있는 slf4j와 조화롭게 공존 할 수 있습니까?컨 스트레인 트 위반으로 인해 번들이 해결되지 않았습니다.
Bundle was not resolved because of a uses contraint violation.
org.osgi.service.resolver.ResolutionException: Uses constraint violation.
Unable to resolve resource My3rdPartyLib.my3rdPartyLib_api [osgi.identity;
osgi.identity="My3rdPartyLib.my3rdPartyLib_api"; type="osgi.bundle";
version:Version="2.4"] because it is exposed to package 'org.slf4j'
from resources slf4j.api [osgi.identity; osgi.identity="slf4j.api";
type="osgi.bundle"; version:Version="1.7.21"] and activemq-all
[osgi.identity; osgi.identity="activemq-all"; type="osgi.bundle";
version:Version="5.9.0"] via two dependency chains.
Chain 1:
My3rdPartyLib.my3rdPartyLib_api [osgi.identity;
osgi.identity="My3rdPartyLib.my3rdPartyLib_api"; type="osgi.bundle";
version:Version="2.4"]
import: (osgi.wiring.package=org.slf4j)
|
export: osgi.wiring.package: org.slf4j
slf4j.api [osgi.identity; osgi.identity="slf4j.api";
type="osgi.bundle"; version:Version="1.7.21"]
Chain 2:
My3rdPartyLib.my3rdPartyLib_api [osgi.identity;
osgi.identity="My3rdPartyLib.my3rdPartyLib_api"; type="osgi.bundle";
version:Version="2.4"]
import: (osgi.wiring.package=org.apache.activemq)
|
export: osgi.wiring.package: org.apache.activemq; uses:=org.slf4j
export: osgi.wiring.package=org.slf4j
activemq-all [osgi.identity; osgi.identity="activemq-all";
type="osgi.bundle"; version:Version="5.9.0"]
at org.eclipse.osgi.container.Module.start(Module.java:434)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1582)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1561)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1533)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1476)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1)
at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)
RCP 플러그인으로 사용해 보았습니다. target-> content view에서 제 3 자 jar와 필요한 종속성에 체크 표시합니다. 나는 내가 필요로하는 slf4j 항아리에도 체크 표시를한다. 제품 -> 유효성 검사를 실행하면 '문제 없음'이 표시됩니다. 내가 그것을 실행할 때, 위의 메시지로 불어납니다.
도움이 될 것입니다.
두 매니페스트에는 '사용'섹션에서 내 보낸 slf4j에 대한 여러 항목이 있습니다. 내가 그들을 제거하면 어떻게 될지 잘 모르겠다. 나는 플러그인이 나없이 매니 페스트를 편집하지 않고 공존 할 수있는 방법이 있어야한다고 생각한다 (특히 필자는 글을 쓰지 않았기 때문에). RCP/OSGI가 이것을 지원하지 않습니까? – ekjcfn3902039
uses 지시문에 나와 있다고해서 그것이 내보내기라는 의미는 아닙니다. 사용 된 패키지의 유형이 내 보낸 패키지의 API에서 볼 수 있음을 의미합니다. 사용에서 제거하면 동일한 유형 이름에 대한 서로 다른 클래스 객체가 만나는 런타임에 ClassCastExceptions가 발생할 수 있습니다. 나는 그것의 API를 통해 slf4j 유형을 "누설하는"것처럼 보이기 때문에 여기에있는 결함 중 일부는 activemq에 있다고 말하고 싶습니다. –
그래서 2 개의 개별 플러그인을 서로 분리 할 방법이 없습니까? – ekjcfn3902039