【发布时间】:2015-06-29 17:09:49
【问题描述】:
我想部署 karaf 中部署的 bundle 的所有配置文件放在 karaf etc 文件夹中。我希望当捆绑配置文件发生变化时,karaf 会注意到这一点。
我有一个包含几个特性的发行版,一个 XML 特性的例子。我已经尝试了几件事,例如我将 conf 文件添加到如下功能中,但这不起作用。
<feature name="gc-backbone-mqtt" version="${linksmart.gc.version}">
<feature version="${linksmart.gc.version}">gc-backbone-router</feature>
<bundle>mvn:org.eclipse.paho/org.eclipse.paho.client.mqttv3/1.0.0</bundle>
<feature version="${linksmart.gc.version}">gc-type-tunnelled</feature>
<configfile finalname="/etc/mqttBackboneProtocol.cfg">mvn:eu.linksmart.gc/backbone.mqtt.impl/${linksmart.gc.version}/mqttprotocol.properties</configfile>
<bundle>mvn:eu.linksmart.gc/backbone.mqtt.impl/${linksmart.gc.version}</bundle>
</feature>
我尝试过的一些事情:
http://karaf.922171.n3.nabble.com/OSGi-bundle-configuration-file-td4025438.html
我不想复制带有特定路径的文件,如下所示:
有人知道怎么做吗?
更新
为了实现将配置文件部署在etc 文件夹中以便可以在外部重新配置捆绑包,我分三步完成:
构建配置文件:(Works)
为了使配置文件可被 Maven 寻址,我在包 pom.xml 中添加了以下部分。这样配置文件就被部署到仓库了:
pom.xml
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<id>attach-artifacts</id>
<phase>package</phase>
<goals>
<goal>attach-artifact</goal>
</goals>
<configuration>
<artifacts>
<artifact>
<file>src/main/resources/mqttprotocol.properties</file>
<type>cfg</type>
<classifier>configuration</classifier>
</artifact>
</artifacts>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
在 karaf etc 中部署文件(Works)
为了在 karaf etc文件夹中部署配置文件,我在功能文件中添加了 <configfile>,如下所示:
features.xml
<feature name="gc-backbone-mqtt" version="${linksmart.gc.version}">
<feature version="${linksmart.gc.version}">gc-backbone-router</feature>
<bundle>mvn:org.eclipse.paho/org.eclipse.paho.client.mqttv3/1.0.0</bundle>
<bundle>mvn:org.apache.felix/org.apache.felix.fileinstall/3.2.8</bundle>
<configfile finalname="/etc/MQTTBackboneProtocol.cfg">mvn:eu.linksmart.gc/network.backbone.protocol.mqtt.impl/${linksmart.gc.version}/cfg/configuration</configfile>
<feature version="${linksmart.gc.version}">gc-type-tunnelled</feature> <bundle>mvn:eu.linksmart.gc/network.backbone.protocol.mqtt.impl/${linksmart.gc.version}</bundle>
</feature>
捕获配置更改:(不起作用)
为了捕获配置文件的更改,我添加了您建议的代码 (@Donald_W)。问题是我只收到文件通知位于deploy 文件夹中,但不在etc 中。我调试了这段代码,我发现etc 中的文件被专门称为这些文件的“侦听器”。那时我不知道如何成为etc中部署的文件的侦听器
【问题讨论】:
标签: java osgi apache-karaf karaf