2015-02-23 58 views
2

在基於依賴管理器的組件模型中,我試圖將組件的所有樣板都放到基類中。我已經在eclipse + bndtools中連接了所有東西,並且可以成功地將@Init,@Start,@Stop加入到我的基類中,但是當我將「命名」@ServiceReference向上移動時,編譯插件開始拋出錯誤。OSGi Felix依賴關係管理器註釋和抽象類

對於另外一些情況下這是什麼我的方法是什麼樣子,你可以看到我使用的initstart方法動態,這樣我可以擺脫儘可能多的樣板儘可能的。

@ServiceDependency(name = "commands") 
protected void setCommands(CommandList commands) { 
    this.commands = commands; 
} 

@Init 
Map init() { 
    return new HashMap() {{ 
     put("commands.filter", Filter.property(Properties.COMMAND_LIST_ID, getCommandListId())); 
     put("commands.required", "true"); 
    }}; 
} 

@Start 
Map start() { 
    ... 
    return new HashMap() {{ 
     put(Properties.COMMAND_LIST_LISTVIEW_ID, getCommandListViewId()); 
    }}; 
} 

這是堆棧跟蹤蝕打印出:

java.lang.Error: DM Annotation plugin failure 
    at org.apache.felix.dm.annotation.plugin.bnd.AnnotationPlugin.analyzeJar(AnnotationPlugin.java:130) 
    at aQute.bnd.osgi.Analyzer.doPlugins(Analyzer.java:588) 
    at aQute.bnd.osgi.Analyzer.analyze(Analyzer.java:171) 
    at aQute.bnd.osgi.Builder.analyze(Builder.java:344) 
    at aQute.bnd.osgi.Analyzer.calcManifest(Analyzer.java:618) 
    at aQute.bnd.osgi.Builder.build(Builder.java:81) 
    at aQute.bnd.osgi.Builder.builds(Builder.java:1243) 
    at aQute.bnd.build.ProjectBuilder.builds(ProjectBuilder.java:520) 
    at aQute.bnd.build.Project.buildLocal(Project.java:1417) 
    at org.bndtools.builder.NewBuilder.rebuild(NewBuilder.java:655) 
    at org.bndtools.builder.NewBuilder.rebuildIfLocalChanges(NewBuilder.java:545) 
    at org.bndtools.builder.NewBuilder.build(NewBuilder.java:199) 
    at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:734) 
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) 
    at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:206) 
    at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:246) 
    at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:299) 
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) 
    at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:302) 
    at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:358) 
    at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:381) 
    at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143) 
    at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241) 
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) 

在工作中我們使用Eclipse的PDE + SCR(XML),它工作得很好用抽象類繼承。現在,我重溫在綱要規範故有此說關於SCR註釋:

聲明服務註解是不能繼承的,他們只能 可以在給定的類中,標註在其超類層次結構 或接口不被考慮在內。


結束語我自己的依賴管理ontop的程序上的依賴關係,經理人可能似乎是適當的。我會調查/原型,看看它是如何工作的。

回答

1

我有同樣的問題,

的問題是,我的課沒有@Component來註解。 嘗試將@Component添加到當前包含您在此處注意到的代碼的類。我希望它有幫助