【问题标题】:Using properties file in osgi bundle在 osgi 包中使用属性文件
【发布时间】:2013-05-17 10:50:35
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您是将属性文件保存在 JCR 存储库还是文件系统中?

标签: aem osgi-bundle


【解决方案1】:

可以使用 Bundle.getEntry() 方法返回捆绑资源。详情请见this answer

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 感谢您对 OSGI 配置的见解。但是我的项目目前需要专门使用 .properties 文件。但是我的捆绑代码永远找不到文件,无论我把它放在哪里。
    • 你是如何加载属性文件的?
    • 我尝试将它添加到捆绑包中(在 /resources 目录内外)并尝试将其保存在 /etc/designs/myFolder .. 但总是得到相同的结果,即 FileNotFoundException跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 2012-05-25
    • 2014-08-31
    • 2016-07-22
    相关资源
    最近更新 更多