【问题标题】:Reload target platform in eclipse dynamically from plugin从插件动态重新加载eclipse中的目标平台
【发布时间】:2011-08-09 15:17:59
【问题描述】:

我正在为 Eclipse 编写一个插件,我需要在给定时间重新加载活动的目标平台。 - 就像 Preferences -> Plug-In Development -> Target Platform -> Reload.button 一样,但当然是动态地从我的插件中获得。

我会想象这样的方式,但我找不到入口/MagicProvider:

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

希望你们中的一些人知道诀窍:)

【问题讨论】:

    标签: eclipse eclipse-plugin


    【解决方案1】:

    尝试了 Max 的方法,但似乎没有用。搜索 eclipse 源代码后,我发现 ITargetDefinition 只是一个工作副本,必须保存。所以代码将是:

    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);
    

    但要感谢 Max 的指导。 :)

    如果其他人需要一些信息,我建议看看

    org.eclipse.pde.internal.ui.preferences.TargetPlatformPreferencePage 靠近第 771 - 812 行和方法 handleReload() 和org.eclipse.pde.internal.ui.editor.targetdefinition.TargetEditor 231 号线附近

    【讨论】:

      【解决方案2】:

      给你:

      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);
      

      【讨论】:

      • 在 MacOSX + eclipse Juno 上不起作用:我得到一个异常:java.lang.NoClassDefFoundError: org/eclipse/pde/internal/core/target/provisional/ITargetPlatformService 适用于 Linux 和 Win32。
      【解决方案3】:

      在 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);
      

      在你的 plugin.xml 中添加依赖 org.eclipse.pde.core

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-29
        • 2012-01-27
        • 2017-08-03
        • 2016-09-06
        • 2012-09-20
        • 1970-01-01
        • 2011-09-18
        相关资源
        最近更新 更多