我想创建一个包含声明性服务的插件模板。到目前为止,我一直在跟随" Creating your own Eclipse-plugin"的领导,这很好。 然后我在MyOptionTemplateSection的updateModel(..)方法中生成OSGI-INF / my-component.xml文件,该文件也可以很好地工作。
..但是我需要在我想要创建的项目的MANIFEST.MF文件中添加一行,以及我遇到的问题:
服务组件:OSGI-INF / mycomponent.xml
我怎样才能做到最好? 在生成捆绑包之前,我没有看到在项目模型中插入这种方法的任何方法,如果我尝试在我的OptionTemplateSection的updateModel(..)期间访问Manifest.MF文件,那么它不是&还没有。在我开始执行者和喜欢之前,我想知道是否有一种优雅的方法来解决这个问题。我不认为这是一个不寻常的请求,能够在模板中声明组件。
提前致谢!
答案 0 :(得分:1)
好吧,经过一天跟随Greg的领导,我找到了一个不太优雅的解决方案,但足够接近。如果有人想要更改manifest.mf文件,那么必须得到PDE的IBundle接口。遗憾的是,PDE不鼓励访问这个界面,很可能是因为它仍处于开发阶段(我觉得PDE团队正在逐步淘汰'插件'的概念,转而支持'捆绑',这是有道理的)。
无论如何,在你的OptionTemplateSection的updateModel(...)方法 - 或NewPluginTemplateWizard的performFinish(..)方法中,你得到一个IPluginModel,它实际上是一个IBundlePluginModelBase。以下三行将向清单文件添加Service-Component:
@Override
protected void updateModel(IProgressMonitor monitor) throws CoreException {
IBundlePluginModelBase mb = (IBundlePluginModelBase) model;
IBundle bundle = mb.getBundleModel().getBundle();
bundle.setHeader( "Service-Component", "OSGI-INF/component.xml" );
....
}
bundle.setHeader(key,value)允许您将任何行包含在清单文件中,因此您也可以使用它来创建片段包,Web上下文或自定义清单
正如我所说,这个解决方案会产生“气馁的事件”警告,但我个人认为这是对PDE的过度限制选择,而不是编码错误。