Java RCP:从现有扩展创建扩展点

时间:2017-06-27 13:17:52

标签: java eclipse ide rcp

我目前正在使用基于Eclipse和RCP开发的Java应用程序;这个应用程序有很少的jar格式的插件文件,这些文件包括特定的pricelist生成程序。

我需要开发一个全新的应用程序,它使用现有的扩展来构建新的价格表,所以我创建了一个新的插件项目,并尝试创建与现有扩展程序兼容的扩展点。

问题是我对RCP一点也不专业,所以我确实犯了一些错误:当我尝试用这个扩展时:

IExtensionRegistry reg = Platform.getExtensionRegistry();
IConfigurationElement[] extensions = 
reg.getConfigurationElementsFor("prices.year");

for (int i = 0; i < extensions.length; i++) {
    if(extensions[i].getName().equals("2016")) {
        // Do something
    }
}

我总是得到0个元素。

所以我确定在创建扩展点时或者在添加可用扩展名时出错了......或者两者兼而有之!

实际上: - 我在项目中添加了jar文件,然后包含在构建配置中 - 我创建了扩展点 - 我打开.exsd文件,添加了一个带有“class”属性的“client”元素;这个类“Implements”字段指向jar类中定义的对象(同一个对象在插件文件中实现) Eclipse window 在插件文件(.jar)里面我有这个:

public class Pricelist2017 extends Pricelist
 implements IPricedata
 {
   ...

-

编辑: 在应用greg-449建议后,现在我可以获得一些扩展,但是当我尝试访问它时遇到问题:

IExtensionRegistry reg = Platform.getExtensionRegistry();
IConfigurationElement[] extensions = reg.getConfigurationElementsFor("prices.year");

for (int i = 0; i < extensions.length; i++) {
    System.out.println(extension[i].getName());
    System.out.println(extension[i].getAttribute("id"));
    System.out.println(extension[i].toString());
}

我得到了(发现了2个扩展名):

client
null
prices.year.2016.Doc16@21b2e768

client
null
prices.year.2015.Doc15@313b2ea6

我遗漏了别的东西,但找到触摸的位置很棘手。 非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

到目前为止,您刚刚定义了扩展点。这只是使扩展点可供使用,它创建扩展的任何用途。

首先确保您的扩展点定义定义了如何使用client元素。您需要在Sequence部分中添加extension之类的内容: Definition

您现在必须创建扩展点的一些用途。在plugin.xml编辑器的“扩展”选项卡中,单击“添加...”并创建扩展。您可以在此处指定实现IPricedata的类: Extension