Ric*_*wig 9 eclipse osgi eclipse-plugin eclipse-rcp
我开发了一个Eclipse RCP应用程序,它大量使用OSGi包,它提供了供以后使用的服务.用例要求捆绑包注册其服务(例如导入过滤器)以便稍后在不同情况下使用.OSGi包使用maven-bundle-plugin构建.
如何告诉Equinox自动启动OSGi包?通过Activator的常规方法不起作用.只有懒惰模式正在工作,但我无法触及未知包中的类.我阅读了OSGi规范,并且没有提供与延迟加载相反的负载.还有机会标记捆绑自动加载吗?
在Eclipse中,我有机会将Auto-Start设置为true,但是我在Maven和Tycho的分发版本中做了什么?
由于未加载org.eclipse.equinox.ds的问题,声明性服务无法正常工作.我能以某种方式开始而不是激活器吗?这也是一个解决方案,但我不知道如何构建分发或如何设置配置.
这里的最佳做法是什么?还有其他可能性吗?Eclipse平台上的OSGi包的文档有点薄.
叹.您是Eclipse中误导策略的受害者,以防止(哑)程序员延长启动时间.而不是警告,他们只是决定不开始捆绑.这与OSGi推荐的相反:-(当一个人从中加载一个类时,一个包只能被激活(它们基本上无效开始)(这就是懒惰的激活.)
迄今为止最好的解决方案是使用声明式服务.您可以声明将在启动时激活的即时服务,并且您可以声明延迟服务,这些服务在使用时会被激活.懒惰当然是首选(当你不是一个愚蠢的程序员)但某些用例需要立即,例如通过互联网提供服务的服务器.您必须在config.ini中确保DS已启动.
您可以在插件中使用"org.eclipse.ui.startup"扩展点.这允许您指定将在Eclipse UI启动时调用的IStartup类.只要这是您的捆绑中的一个类,那么您的捆绑包就会启动.
这将意味着包含一个plugin.xml文件,这将是一个Eclipse插件,而不是标准的OSGi包,但您可以使用此插件来激活任何标准的OSGi包.
您在声明式服务方面走在正确的轨道上。手动注册您的服务很像艰苦的工作,安全地查找它们可能会更加困难,而且很难正确完成。该领域需要注意的另一个标准是蓝图,尽管如果您有 DS 元数据,我当然不建议您重写任何内容。Blueprint 在非常动态的环境中具有稍微更好的特性,并且配置更丰富。(我是 Blueprint 实现之一 Apache Aries 的提交者。)对于 Blueprint 和 DS,重要的是有其他东西可以为您管理服务。
这让我们回到了为什么您的捆绑包没有启动的问题。我认为他们确实从菲利克斯开始这一事实一定有线索。您是否启动了 Equinox 控制台并确认所有捆绑包均已安装并解决?('ss' 列出捆绑包。)您是否查看过 config.ini 文件并确认您的捆绑包已列出,并且具有适当的启动级别 - 或者您是否正在使用 Equinox 自动启动其他所有捆绑包?
| 归档时间: |
|
| 查看次数: |
8982 次 |
| 最近记录: |