19

I decided to build an application on top of OSGI and Karaf - I really like this stuff. However, I'm struggling a bit with a daily deployment on my local, development machine. I mean.. I make a change and then I would like to test it on my local Karaf instance. And it can happen like couple times per hour.

The way I'm doing it now is a maven build that creates a JAR bundle and then it's copied into the Karaf's deploy directory. I think that it isn't elegant at all.

I was trying to find a way around (google). I read about Karaf's features but it seems that despite the fact that it is a nice mechanism for deploying whole app, it doesn't solve my problem. As I understand it right, it does not check whether new version of my SNAPSHOT jar appeared in my local maven repo, right?

4

1 回答 1

32

让 karaf 的更新机制起作用的关键是从 maven 部署,而不是使用 deploy 文件夹。像这样安装你的包:

install -s mvn:groupid/artifactID/version

或者

install -s mvn:groupid/artifactID/version/typeOfMavenArtifact

第二个对于安装例如 war/wab 工件很有用。完整的 Maven 协议规范可以在这里找到。

然后,Karaf 知道捆绑包是从哪里来的。您也可以使用la -u. 这使得 karaf 显示现在应该是 maven uri 的更新位置。您不会认为所有 karaf 捆绑包都有这样的更新位置。

现在,当您使用 maven 创建项目的新构建时,它将最终出现在您的本地 maven 存储库中。然后简单地运行

update <bundleid>

这使 karaf 检查更新位置(在您的情况下是本地 maven repo)并从那里重新加载包。

您甚至可以通过使用进一步自动化此操作

dev:watch

或 karaf 3+

bundle:watch

这将使 karaf 检查您的 maven repo 以了解它已部署的 SNAPSHOT 捆绑包的更改并自动重新部署这些。

这也与远程调试一起很好地工作。利用

export KARAF_DEBUG=true

在开始 karaf 之前。然后它将在端口 5005 上侦听调试器。

然后,您可以在同一端口上启动远程调试 Eclipse 会话,并在 karaf 中很好地调试您的应用程序。即使您使用上述方法之一更改捆绑包,这也非常有效。因此,您可以调试、发现问题、更改代码、构建并继续使用更改后的版本进行调试。

当我在 karaf 代码库本身工作时,我也经常使用它,因为它也适用于 karaf 自己的大多数包。

于 2014-07-17T06:08:35.807 回答