我正在使用felix osgi + ds + weld cdi + pax cdi。所以我有以下服务:
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.ServiceScope;
@Component(
immediate = false,
property={"label=stub"},
scope=ServiceScope.PROTOTYPE
)
public class ServiceImpl implements ServiceI{
@Override
public String getMyString() {
Component t=null;
return "This is my string:"+t;
}
}
要生成ds.xml文件,我使用maven-bundle-plugin,因为我知道这是生成ds xml文件的现代方法。所以一切似乎都有效。 Ds xml文件由maven插件生成并放入OSGI-INF。我决定检查如果删除这个ds.xml文件,felix会做什么。所以我删除了这个xml文件并清理了osgi缓存。我对结果感到非常惊讶。该服务仍然可以正常注入。我刚收到消息:找不到组件描述符条目'OSGI-INF / .... xml'。此外我认为编译后会删除@Component注释。这就是为什么我没有在我的osgi中安装org.osgi.service.component包。但是一切正常,所有捆绑都已解决。
所以问题 -
org.osgi.service.component.annotations.Component
? Felix包具有org.osgi.service.component.annotations
包,但没有org.osgi.service.component.annotations.Component
注释。答案 0 :(得分:2)
可能您已将其从文件系统中删除,但未从部署到OSGi Framework中的捆绑包中删除。
答案 1 :(得分:0)
我必须承认尼尔是对的。注释是构建时间。即使Felix SCR人员已经完成了一次妙招并试图进行运行,因为注释具有CLASS保留,因此除非他们解析类文件,否则它们不可用于运行时。
你必须看到别的东西。