我正在努力围绕开发OSGI包发布给卡拉夫。在创建新项目时,我使用Netbeans 7.4和创建Maven OSGI包。我认为我正在处理不同项目之间的依赖关系,并在Netbeans中与他们合作,然后发布给Karaf。在Netbeans和Karaf中开发OSGI包时如何管理依赖关系?
我想要做的是建立一个REST Web服务;我发现this tutorial是一个很好的起点,可以让一些基本的东西运行起来。所以我开始用子项目设置一个父项目(所有这些都来自Maven OSGI Bundle模板)。但是,在我开始部署捆绑到我的Karaf实例后,我开始在Karaf内部与“缺失的要求”错误搏斗。我会开始尝试列出每个依赖关系<Export-Package>
或<Embed-Dependency>
,但似乎我只是继续往下走,总是得到新的“缺少要求”消息列出另一个依赖项。然后我开始尝试使用maven copy-dependencies插件来导出我的项目中使用的任何依赖关系,并将所有出现在Karaf deploy文件夹中的副本都复制出来。这在很大程度上是有效的,但我正在与我认为是第三方jar的下游依赖关系摔跤,但无论如何,这可能是一个单独的问题。
所以,我想知道的是我应该如何使用此设置开发一个连贯的“应用程序”?我知道我应该把所有东西都分成独立的捆绑包;即将我的REST接口作为一个接口,将实现作为另一个接口,将业务逻辑作为另一个接口。作为maven项目,如果我有日期时间处理或字符串实用程序的依赖项,maven将处理所有这些问题。但是这些依赖不会自动包含在我的OSGI包中,是这种情况吗?什么是工作流程,以确保我的项目所依赖的一切都可用于Karaf中的包?我的项目是否有其他项目作为依赖关系,即接口实现?我会将该项目作为依赖项包含在它的编译中,但是如何确保在项目发布后符合该依赖项?
谢谢,这非常有帮助!我认为我的问题的一部分是,我的一个捆绑包依赖于第三方的jar,我在Karaf中遇到了麻烦。我认为这抛出了一些试图使用它的捆绑包。现在对我来说更有意义,但我可能会打开一个针对该问题的新问题。 还有一个 - 在Karaf/OSGI中,配置变量是如何处理的?也就是说,针对开发者开发,然后再将服务指向生产层?通常我会使用某种参数或配置文件,但这是如何工作的? –
在OSGi中,通常最好使用配置管理服务处理配置。在karaf中,它被映射到etc目录中的配置文件。我写了一篇关于此的教程:http://www.liquid-reality.de/x/G4Be –
谢谢!我已经浏览了示例,并设置了蓝图设置和.cfg文件。我的设置在Karaf控制台中可用,我可以对其进行修改,但这一更改似乎并未反映在我的捆绑应用程序中。至少refresh()方法永远不会被触发。从代码中读取配置值有没有诀窍?如果使用Blueprint进行配置,是否需要使用纯OSGI接线(ConfigUpdater)? –