在基于Dependency Manager的组件模型中,我试图将我组件的所有样板文件丢弃到基类中。我已经将所有内容都连接到eclipse + bndtools中,并且可以成功地将@Init
,@Start
,@Stop
推送到我的基类中,但是当我移动我的"命名" @ServiceReference
编译插件开始抛出错误。
对于某些进一步的上下文,这就是我的方法的样子,因为你可以看到我动态地使用init
和start
方法,这样我就可以摆脱尽可能多的样板。
@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());
}};
}
这是堆栈跟踪eclipse打印出来的:
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注释有这样的说法:
声明性服务注释不是继承的,它们只能是 在给定的类上使用,在其超类层次结构上使用anno- tations 或者不考虑接口。
将自己的依赖关系管理包装在编程依赖关系管理器上似乎是合适的。我将调查/原型以了解它是如何工作的。
答案 0 :(得分:1)
我有同样的问题,
问题是我的班级没有用@Component注释注释。 尝试将@Component添加到当前类中,其中包含您在此处注意到的代码。
我希望它有所帮助