2013-05-17 64 views
1

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

我试图将该文件放在捆绑包的/ resources文件夹中,也在外面(在/ etc/designs /中),但文件总是加载失败,并如下抛出异常:

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

我想保持管束外的文件,以便它可以在不改变束进行编辑

+0

你保持在JCR库或文件系统的属性文件? – Chetan

回答

0

你有没有考虑使用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"呈现

+0

感谢您对OSGI配置的洞察。但是我的项目目前需要专门使用.properties文件。但是,无论我在哪里,我的包代码都不会找到该文件。 –

+0

你是如何加载属性文件? – diffa

+0

我试着将它添加到捆绑包(在/ resources目录中和外部),并试图将它保存在/ etc/designs/myFolder ..但总是得到相同的结果,即FileNotFoundException –

1

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

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

加载从资源库中的文件,你需要使用ResourceResolver.getResource('/etc/design/path/to/the/file/filename.properties')