Eclipse 限制插件之间贡献的扩展点数据
我有2个我正在构建的eclipse插件;让我们称他们为插件A和插件B 插件A需要许可证才能运行,插件B是免费的。我在插件B中创建了一个扩展点,插件A为其提供(在某些情况下覆盖)数据。如果插件a未获得许可(无需检查插件是否可以启动),我想找到一种方法来忽略插件B中的数据Eclipse 限制插件之间贡献的扩展点数据,eclipse,eclipse-plugin,osgi,eclipse-3.4,Eclipse,Eclipse Plugin,Osgi,Eclipse 3.4,我有2个我正在构建的eclipse插件;让我们称他们为插件A和插件B 插件A需要许可证才能运行,插件B是免费的。我在插件B中创建了一个扩展点,插件A为其提供(在某些情况下覆盖)数据。如果插件a未获得许可(无需检查插件是否可以启动),我想找到一种方法来忽略插件B中的数据 eclipse中是否有这样的机制允许我完成这样的壮举?我目前的解决方法是检查插件是否已启动(通过捆绑包),以及插件是否未尝试启动。如果插件A未经许可,我会在start()方法中抛出一个异常。要求 因此,您正在编写两个插件 插件B有
eclipse中是否有这样的机制允许我完成这样的壮举?我目前的解决方法是检查插件是否已启动(通过捆绑包),以及插件是否未尝试启动。如果插件A未经许可,我会在
start()
方法中抛出一个异常。要求
因此,您正在编写两个插件
插件B有一个扩展点。如果用户拥有插件A的捆绑包和许可证,那么插件A应该为插件B中的EP提供扩展
接近
OSGi的安全模型主要构建在默认Java权限和SecurityManager之上。本演示文稿中有来自的讨论。我希望围绕这一点建立一个许可证制度是可能的
您的解决方案听起来似乎可行,但是,有两个问题:
- 阻止bundle启动可能会阻止注册任何服务,但会影响扩展注册表中的更改吗?i、 e.使用plugin.xml注册的扩展。我想DS服务可以,但我得试试李>
- 停止捆绑包可能还不够-以后可以重新启动吗?我可能希望卸载它
- 未经许可的捆绑包是告诉用户许可的机会。那么,您如何告诉用户该捆绑包未获得许可,无法使用,顺便说一句,下面是您如何许可它的
一定要把你的发现报告出来。要求 因此,您正在编写两个插件 插件B有一个扩展点。如果用户拥有插件A的捆绑包和许可证,那么插件A应该为插件B中的EP提供扩展 接近 OSGi的安全模型主要构建在默认Java权限和SecurityManager之上。本演示文稿中有来自的讨论。我希望围绕这一点建立一个许可证制度是可能的 您的解决方案听起来似乎可行,但是,有两个问题:
- 阻止bundle启动可能会阻止注册任何服务,但会影响扩展注册表中的更改吗?i、 e.使用plugin.xml注册的扩展。我想DS服务可以,但我得试试李>
- 停止捆绑包可能还不够-以后可以重新启动吗?我可能希望卸载它
- 未经许可的捆绑包是告诉用户许可的机会。那么,您如何告诉用户该捆绑包未获得许可,无法使用,顺便说一句,下面是您如何许可它的
请报告您的发现。我能想到的一个可能的解决方案是,您将一个类从插件a贡献给插件B。然后,当插件B读取贡献项时,它可以尝试创建该类的实例 插件A中的类如果未获得许可,则可以在构造函数中引发一些异常。这将告诉插件B来自插件A的信息可以忽略 插件B中可能的实现如下所示:
IExtensionPoint extensionPoint = registry.getExtensionPoint("mypoint");
IConfigurationElement[] elements = extensionPoint.getConfigurationElements();
for (int i = 0; i < elements.length; i++) {
try {
(License)elements[i].createExecutableExtension("class");
// ..... Read any other items you need....
}
catch(LicenceException e){
// Plugin is invalid, do not use
}
}
IExtensionPoint extensionPoint=registry.getExtensionPoint(“mypoint”);
IConfigurationElement[]elements=extensionPoint.getConfigurationElements();
for(int i=0;i
我能想到的一个可能的解决方案是,将一个类从插件a贡献给插件B。然后,当插件B读取贡献项时,它可以尝试创建该类的实例
插件A中的类如果未获得许可,则可以在构造函数中引发一些异常。这将告诉插件B来自插件A的信息可以忽略
插件B中可能的实现如下所示:
IExtensionPoint extensionPoint = registry.getExtensionPoint("mypoint");
IConfigurationElement[] elements = extensionPoint.getConfigurationElements();
for (int i = 0; i < elements.length; i++) {
try {
(License)elements[i].createExecutableExtension("class");
// ..... Read any other items you need....
}
catch(LicenceException e){
// Plugin is invalid, do not use
}
}
IExtensionPoint extensionPoint=registry.getExtensionPoint(“mypoint”);
IConfigurationElement[]elements=extensionPoint.getConfigurationElements();
for(int i=0;i
如果未获得许可,A不应该检查其许可证本身,不覆盖/不提供任何数据(或覆盖提供相同的数据)?为什么把许可证检查的负担放在B身上,而B根本不在乎(因为它是免费的)
如果找不到许可证,我会选择以有限模式启动。正如jamesh所建议的那样,您可能还希望给用户提供提供许可证的机会,例如,使用一个额外的A-UI插件,通知用户缺少许可证并提供给许可证。A不应该检查其许可证本身,也不应该覆盖/不提供任何数据(或覆盖提供相同的数据)