我为CQ5应用程序创建了一个简单的OSGi包。我想从属性文件(常规键值文件)中读取某些属性
我曾尝试将该文件放在bundle的/ resources文件夹中以及外部(在/ etc / designs /中),但该文件始终无法加载并抛出异常,如下所示:
java.io.FileNotFoundException: \path\to\the\file\filename.properties
(The system cannot find the path specified)
我想将文件保留在捆绑包之外,以便可以在不更改捆绑包的情况下对其进行编辑
答案 0 :(得分:1)
可以使用Bundle.getEntry()方法返回Bundle资源。有关详细信息,请参阅this answer。
可以通过类加载器加载资源(例如this.getClass().getClassLoader().getResource("path.to.the.file.filename.properties");
)。但请记住,bundle无法导出root / default类路径,因为无法导出/导入,因此您的资源需要存在于导出的包中。
要从存储库加载文件,您需要使用ResourceResolver.getResource('/etc/design/path/to/the/file/filename.properties')
答案 1 :(得分:0)
您是否考虑过使用OSGi配置管理来管理这些属性?
您可以在OSGi组件/服务上定义可以通过felix控制台配置的属性(例如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"演示文稿