OSGi Felix Dependency Manager Аннотации и абстрактные классы
В модели компонентов, основанной на 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());
}};
}
это трассировка стека распечатывает:
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:
Аннотации декларативных сервисов не наследуются, они могут использоваться только для данного класса, аннотации для его иерархии или интерфейсов суперкласса не принимаются во внимание.
Обертывание моего собственного управления зависимостями поверх программного менеджера зависимостей может показаться целесообразным. Я буду исследовать / прототип, чтобы увидеть, как это работает.
1 ответ
У меня такая же проблема,
проблема заключалась в том, что мой класс не был аннотирован аннотацией @Component. попробуйте добавить @Component в ваш текущий класс, содержащий коды, которые вы заметили здесь.
Я надеюсь, что это помогает