【问题标题】:Loading plugin from a JAR file从 JAR 文件加载插件
【发布时间】:2014-04-17 06:40:04
【问题描述】:

我需要将插件(带有 UI)放入 JAR 中。从另一个插件 UI(通过 Eclipse 菜单)我需要在 jar 中显示插件的 UI。是否可以?我的意思是以编程方式动态加载另一个插件。

【问题讨论】:

    标签: eclipse-plugin


    【解决方案1】:

    是的,这是可能的。

    类似这样的:

    BundleContext bundleContext = Platform.getBundle("your-plugin-id").getBundleContext();
    FileInputStream is = new FileInputStream(file);
    String name = "initial@" + file.toURI().toURL().toString();
    Bundle b = bundleContext.installBundle(name, is);
    b.start();
    

    但我不认为这是你想要做的。只需在 Eclipse 插件与 JAR 文件之间创建依赖关系。然后,当用户单击菜单并触发操作时,您只需像往常一样从 jar 文件启动 UI。

    【讨论】:

    • 非常感谢。我是否需要在 Eclipse 插件与 JAR 文件之间创建依赖关系才能使您的代码正常工作?一旦用户在列表框中选择插件描述,我提到的插件 JAR 文件就会从数据库中下载。所以我们不能创建依赖对吗?
    • @user3544081 如果插件在构建/编译时不可用,则无法创建依赖项。上面的代码示例只需要一个文件来安装它。
    • 获取捆绑上下文(您提供的示例代码的第 1 行)是否成功。如果我关闭插件(JAR 之一)项目,我会收到 NullPointerException。
    • @Kumar NPE 表示找不到捆绑包。它尚未解决,即它不可用或依赖项阻止它加载。您可能希望将其拆分为两行,首先是“Platform.getBundle("your-plugin-id")”并检查它是否不返回 null。
    • 感谢您的回复。 "Platform.getBundle("your-plugin-id")" 返回 null。我觉得没有依赖问题,因为它在工作区中打开项目(JAR 之一)之前工作。如果此方法调用的插件可用或可解析,那么我需要做什么?我的意思是没有在工作空间中打开项目。如果您需要任何其他信息来回答,请告诉我。
    猜你喜欢
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    • 2019-01-02
    • 2014-05-07
    • 2011-07-18
    • 2013-08-26
    相关资源
    最近更新 更多