1

我为我的 CQ5 应用程序创建了一个简单的 OSGi 包。我想从属性文件(常规键值文件)中读取某些属性

我试图将文件放在捆绑包的 /resources 文件夹和外部(在 /etc/designs/ 中),但文件总是无法加载并抛出异常,如下所示:

java.io.FileNotFoundException: \path\to\the\file\filename.properties 
(The system cannot find the path specified)

我想将文件保留在捆绑包之外,以便可以在不更改捆绑包的情况下对其进行编辑

4

2 回答 2

1

可以使用 Bundle.getEntry() 方法返回捆绑资源。有关更多详细信息,请参阅此答案

可以通过类加载器(例如this.getClass().getClassLoader().getResource("path.to.the.file.filename.properties");)加载资源。但请记住,捆绑包无法导出根/默认类路径,因为它无法导出/导入,因此您的资源将需要存在于导出的包中。

要从存储库加载文件,您需要使用ResourceResolver.getResource('/etc/design/path/to/the/file/filename.properties')

于 2013-05-20T10:17:52.943 回答
0

您是否考虑过使用 OSGi 配置管理员来管理这些属性?

您可以在您的 OSGi 组件/服务上定义可以通过 felix 控制台配置的属性(例如localhost:4502/system/console/configMgr)。或者您可以将配置部署为内容,如果需要特定于特定运行模式(例如作者、发布)

这比外部配置文件有一些优势。配置参数可以独立于部署的包进行更改。还有一个好处是可以对正在运行的应用程序进行配置更改,而无需重新启动。

您需要使用@Property SCR 注释来注释您的配置属性。

有关以下博客文章的更多信息: http ://www.wemblog.com/2012/10/how-to-work-with-configurations-in-cq.html或此“OSGI for mere mortals”演示文稿

于 2013-05-18T00:06:25.283 回答