简体   繁体   English

从插件动态重新加载eclipse中的目标平台

[英]Reload target platform in eclipse dynamically from plugin

I'm writing a plugin to eclipse, in which I need to reload active target platform, at a given time.我正在为 eclipse 编写一个插件,我需要在给定时间重新加载活动的目标平台。 - just as the Preferences -> Plug-In Development -> Target Platform -> Reload.button, but of course dynamically from my plugin. - 就像 Preferences -> Plug-In Development -> Target Platform -> Reload.button,但当然是从我的插件动态。

I would imagine something like this would be the way, but i can't find the entrance/MagicProvider:我想像这样的事情会是这样,但我找不到入口/MagicProvider:

MagicProvider.getTargetPlatforms().getActive().reload();

Hope some of you know the trick :)希望你们中的一些人知道诀窍:)

Tried Max's approach, but it didn't seem to work.尝试了 Max 的方法,但似乎不起作用。 After searching the eclipse source I found out, that the ITargetDefinition is just a working copy, and must be saved.在搜索了 eclipse 源之后,我发现 ITargetDefinition 只是一个工作副本,必须保存。 So the code will be:所以代码将是:

org.eclipse.pde.internal.core.target.provisional.ITargetPlatformService service = org.eclipse.pde.internal.core.PDECore.getDefault().acquireService(ITargetPlatformService.class.getName());
org.eclipse.pde.internal.core.target.provisional.ITargetDefinition target = service.getWorkspaceTargetHandle().getTargetDefinition();
target.resolve(IProgressMonitor);
org.eclipse.pde.internal.core.target.provisional.LoadTargetDefinitionJob.load(target);

But credits to Max for the guideline.但该指南归功于 Max。 :) :)

If anyone else needs some info, I recommend taking a look at如果其他人需要一些信息,我建议查看

org.eclipse.pde.internal.ui.preferences.TargetPlatformPreferencePage near line 771 - 812 and method handleReload() and org.eclipse.pde.internal.ui.editor.targetdefinition.TargetEditor near line line 231 org.eclipse.pde.internal.ui.preferences.TargetPlatformPreferencePage靠近第 771 - 812 行和方法 handleReload() 和org.eclipse.pde.internal.ui.editor.targetdefinition.TargetEditor靠近第 231 行

Here you go:干得好:

org.eclipse.pde.internal.core.target.provisional.ITargetPlatformService service = org.eclipse.pde.internal.core.PDECore.getDefault().acquireService(ITargetPlatformService.class.getName());
org.eclipse.pde.internal.core.target.provisional.ITargetDefinition target = service.getWorkspaceTargetHandle().getTargetDefinition();
target.resolve(IProgressMonitor);

In Eclipse 2020-09 it works for me as...在 Eclipse 2020-09 中,它对我有用,因为...

import org.eclipse.pde.core.target.ITargetDefinition;
import org.eclipse.pde.core.target.ITargetPlatformService;
import org.eclipse.pde.core.target.LoadTargetDefinitionJob;
...
    BundleContext context = ... from Activator.start() method
    ServiceReference<ITargetPlatformService> ref = context.getServiceReference(ITargetPlatformService.class);
    ITargetPlatformService service = context.getService(ref);
    ITargetDefinition def = service.getWorkspaceTargetDefinition();
    def.resolve(new NullProgressMonitor());
    LoadTargetDefinitionJob.load(def);

Add dependency org.eclipse.pde.core in your plugin.xml在 plugin.xml 中添加依赖项 org.eclipse.pde.core

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM