【问题标题】:Add and remove plugins to the plugin folder in a RCP application在 RCP 应用程序的插件文件夹中添加和删除插件
【发布时间】:2012-08-17 07:09:02
【问题描述】:

我是 Eclipse 插件开发的新手。当我遇到某些插件概念时,我的脑海中出现了一些问题。

对于基于插件的产品,如果我们想添加一个新功能,比如执行某些验证,我们只需要删除一个编写验证逻辑的特定插件。同样,如果我们想从我们的产品中删除某些功能,我们只需要删除提供该功能的特定插件。

我尝试在我构建的 RCP 产品之一中执行相同的操作。我试图从插件文件夹中删除一个插件以禁用我的应用程序中的特定功能。但它收到如下错误消息,

!MESSAGE Bundle com.my.app.application_1.0.0.201208101553 [6] was not resolved.
!SUBENTRY 2 com.my.app.application 2 0 2012-08-17 12:37:13.256
!MESSAGE Missing imported package com.my.app.views.console_0.0.0.

!ENTRY org.eclipse.osgi 4 0 2012-08-17 12:37:13.256
!MESSAGE Application error
!STACK 1
java.lang.RuntimeException: Application "com.my.app.application.application" could not be found in the registry. The applications available are: org.eclipse.equinox.app.error.
    at org.eclipse.equinox.internal.app.EclipseAppContainer.startDefaultApp(EclipseAppContainer.java:248)
    at org.eclipse.equinox.internal.app.MainApplicationLauncher.run(MainApplicationLauncher.java:29)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1410)

您能告诉我为什么会出现这个错误以及如何克服这些错误吗?

【问题讨论】:

    标签: eclipse-plugin eclipse-rcp rcp


    【解决方案1】:

    每个 RCP 产品都有一个定义应用程序的主插件(阅读更多 Eclipse RCP Tutorial 由 Lars Vogel 撰写)。您删除了导出 com.my.app.views.console 包的插件,但主插件 (com.my.app.application) 需要(导入)该包。因此,无法解析主插件并且无法找到在该插件中定义的应用程序 - 这就是您在异常消息中看到的内容。

    【讨论】:

    • 您好 Qinto,感谢您的宝贵回复。那么我怎样才能实现我在问题中提出的情况呢?我想从我的 RCP 产品的插件文件夹中删除或删除一些插件,以实现某些核心功能。但是,就像您指定的那样,如果插件文件夹中不存在由主插件导入的插件,它将抛出一个异常,就像我在上面的问题中显示的一样。所以,请提出一种我可以实现上述情况的方法
    【解决方案2】:

    如果您希望能够在不破坏您的应用程序的情况下删除 com.my.app.views.console 插件,您将必须找到一种方法来删除您的 com.my.app.application 的硬依赖com.my.app.views.console 插件上有插件。

    【讨论】:

    • 嗨 twindham,请指导我如何删除硬依赖
    • 当然。让我们完成这个练习。我假设您在开发环境中将两个插件作为项目打开。我将要告诉您的操作将帮助您识别需要更改的代码。步骤 1. 关闭 com.my.app.views.console 插件的插件项目。步骤 2. 注意当您尝试编译时出现在插件项目 com.my.app.application 插件中的编译错误。步骤 3. 通过将代码从 com.my.app.views.console 插件移动到 com.my.app.application 插件来修复这些编译错误。免责声明:这可能有效,也可能根本无效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-04
    • 1970-01-01
    • 2010-12-06
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    相关资源
    最近更新 更多