당신은 org.eclipse.ui
번들을 얻고 버전을 확인하기 위해 org.eclipse.core.runtime.Platform
를 사용할 수 있습니다.
Version ui = Platform.getBundle("org.eclipse.ui").getVersion();
// then do something with that
등록 MyListener
> = 3.5의 경우, 그렇지 OldMyListener
.
편집 :
오른쪽, 위에서 런타임 동작의 차이를 캡처에만 좋다.
Eclipse는 일부 클래스 만로드하기위한 몇 가지 트릭을 지원합니다.
개발 관점에서 가장 쉬운 방법은 @ShiDoiSi가 언급 한 트릭입니다.
Bundle myBundle = org.osgi.framework.FrameworkUtil.getBundle(this.class);
Version ui = Platform.getBundle("org.eclipse.ui").getVersion();
Version cutOff = new Version(3,5,0);
final Executable processListener;
if (ui.compareTo(cutOff)<0) {
Class pc = myBundle.loadClass("my.pkg.OldListenerProcess");
processListener = (Executable) pc.newInstance();
} else {
Class pc = myBundle.loadClass("my.pkg.ListenerProcess");
processListener = (Executable) pc.newInstance();
}
processListener.execute(targetObject);
다른 번들의 기여가 사용하는 버전을 결정할 수 있도록 자신 만의 확장 점을 정의하는 것 이클립스 프레임 워크의 이상을 사용하는 또 다른 방법. 기본적으로 위와 같은 패턴이지만, 버전 확인은 플러그인의 종속 범위에 의해 수행되며 Executable
이 실행됩니다. 기존 방식에서는 org.eclipse.ui [0.0.0,3.5.0]에 의존하고, 현재 방식에서는 org.eclipse.ui 3.5.0 (3.5.0에서는 끝나는 범위)을 지정합니다. 그런 다음 확장을 읽고 제공된 클래스를 인스턴스화 할 수 있습니다.
이 플러그인을 추가로 작성하는 경우 (2 가지 차이점이 조금 큼) 메인 플러그인에 명령을 정의하고 추가 플러그인이 해당 핸들러를 제공하도록 할 수 있습니다. 플러그인은 여전히 의존성 범위를 가져야 만 < 3.5 또는> = 3.5 경우에 하나만로드됩니다. 그런 다음 명령 API를 사용하여 명령을 실행할 수 있습니다 (올바른 핸들러가 실행됩니다).
ICommandService cmdS
= (ICommandService) workbenchWindow.getService(ICommandService.class);
Command process = cmdS.getCommand("my.pkg.ListenerProcess");
ParameterizedCommand cmd = new ParameterizedCommand(process, null);
IHandlerService handlerS
= (IHandlerService) workbenchWindow.getService(IHandlerService.class);
IEvaluationContext ctx = handlerS.createContextSnapshot(false);
ctx.addVariable("toAddListener", targetObject);
handlerS.executeCommandInContext(cmd, null, ctx);
그런 다음 핸들러의 구현 당신이 ExecutionEvent에서 필요한 객체를 추출하는 HandlerUtil.getVariable(event, "toAddListener")
을 사용합니다.
Eclipse 3.1/3.2? 나는 당신이 정말로 옛날 이클립스 버전을 지원해야하는지 스스로에게 물어야한다고 생각한다. 3.1이 2005 년에 나왔습니다. 일부 고객/클라이언트가 오래된 Eclipse 버전을 사용하고 있다면, 먼저 업그레이드 권장에 집중해야한다고 말하고 싶습니다. – Fredrik
감사합니다. Fredrik, 나는 당신의 요점을 지키지 만, 버전 3.4는 2008 년에 나온 것입니다. 최소한 그것을 지원하는 것이 좋을 것입니다. 그래서, 문제가되는 유일한 의존성이기 때문에 가능한지 알아내는 것이 여전히 흥미로울 것입니다. –