3

我有一个带有多个捆绑包的 osgi 应用程序(在 felix 中)。一个包中有一些通用属性文件,其余包只需要使用它们即可。

我们使用 maven 和 spring osgi,属性文件位于如下资源中:

<path to bundle>/src/main/resources/
    common.properties
    engine.properties
    ...

Maven 通常在 bundle jar 中构建它们,因此它们应该位于应用程序类路径中,但是 Spring 无法访问它们,这会失败:

<context:property-placeholder location="classpath:common.properties" />

(尝试了 classpath*: 和其他组合)

我读过这个这个

这真的是 osgi 意识形态的一些全球性问题,而且没有标准的方法让它发挥作用吗?只有像这样的黑客和解决方法<osgix:cmProperties...>

之所以担心,是因为它使部署变得更加困难且容易出错:您不能mvn deploy像在普通应用程序中那样在 jar 中部署属性文件 - 您必须在每次发布时手动将它们复制到生产盒中。

4

4 回答 4

5

对于 OSGi,没有通用的应用程序类路径。尽管属性位于包含它们的包的类路径中,但它们不一定位于使用它们的包的类路径中。

这有点难看,但通常导出包含属性文件夹的“包”将使它们可以访问。在这种情况下,它看起来像'.',这非常难看,但你可以将它们放在'properties'目录中(比如说),然后导出一个属性包。使用这些属性的捆绑包也需要导入属性包。

或者,使用包含包的类加载器来查找资源将起作用,尽管我无法评论 Spring 配置的外观。

于 2012-05-18T05:41:43.187 回答
2

阅读所有捆绑包中的公共属性的最佳方法是使用 spring DM 提供的 compendium 服务。

于 2012-12-13T09:49:19.940 回答
0

我发现属性文件应该是“通用”的情况很少见。你不能分解属性文件的内容并将它们放在实际需要它们的包中。属性应按上下文分组并放置在需要该上下文的包中。

理论上类似于不使用常量类或接口,这被认为是反模式。

于 2012-05-18T17:47:44.687 回答
0

我最终使用的另一种选择 - 将属性文件放置到文件系统中,然后从 spring(或其他代码)中将它们引用为file:path/to/common.props.

于 2012-05-21T09:35:09.447 回答