2016-04-14 50 views
2

如果创建以下OSGI-INF/service.xml中,并通过服务组件的设置:OSGi的-INF /在我MANIFEXT.MF service.xml中的Eclipse E4 OSGi服务@Component注释

<?xml version="1.0" encoding="UTF-8"?> 
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="EvalManagerContextFunction"> 

    <implementation class="x.y.context.EvalManagerContextFunction"/> 

    <property name="service.context.key" type="String" value="x.y.eval.EvalManager"/> 

    <service> 
     <provide interface="org.eclipse.e4.core.contexts.IContextFunction"/> 
    </service> 

</scr:component> 

的如果第一次请求EvalManager(ContextFunction类compute被调用),则创建Ev​​alManager

现在,如果我尝试使用注释执行相同操作,则不会调用函数compute

@Component(name = "EvalManagerContextFunction", service = IContextFunction.class, property = "service.context.key=x.y.eval.EvalManager") 
public class EvalManagerContextFunction extends ContextFunction { 

    @Override 
    public Object compute(IEclipseContext context, String contextKey) { 

     EvalManager manager = ContextInjectionFactory.make(EvalManager.class, context); 

     context.get(MApplication.class).getContext().set(EvalManager.class, ContextInjectionFactory.make(EvalManager.class, context)); 

     return manager; 

    } 

} 

回答

1

我看不到的@Component注记类在Eclipse的核心源代码任意任何引用所以它会出现,不支持。

Eclipse Marketplace中有一个插件here,它似乎增加了对此的支持(我还没有尝试过)。

更新:在Eclipse Neon Milestone 6(4.6M6)版本中添加了对此的支持。

+0

好的谢谢格雷格。现在我将与xml文件一起生活。 – Pascal

+0

我已经使用了您提到的DS支持插件,它工作得很完美。每当您更改组件时,插件都会自动创建XML定义文件。 –

+0

我正在使用Neon M6,但它与插件不兼容失败。这个插件的作者回答了一个问题,他说它应该在Neon M6中工作,而不需要添加额外的插件'Dirk,这个插件实现的功能直接从Neon M6(即将发布)直接添加到Eclipse PDE中。请参阅https://bugs.eclipse.org/bugs/show_bug.cgi?id = 376950' – Pascal