如何在Karaf上使用频繁的本地快照包部署?

时间:2014-07-16 22:32:59

标签: maven osgi apache-karaf osgi-bundle karaf

我决定在OSGI和Karaf之上构建一个应用程序 - 我真的很喜欢这个东西。但是,我在本地开发机器上进行日常部署时遇到了一些困难。我的意思是..我做了一个改变,然后我想在我当地的Karaf实例上进行测试。它可能发生在每小时几次。

我现在这样做的方式是创建一个JAR包的maven构建,然后将其复制到Karaf的deploy目录中。我认为它根本不优雅。

我试图寻找解决方法(谷歌)。我读到了Karaf的功能,但似乎尽管它是一个很好的机制来部署整个应用程序,但它并没有解决我的问题。据我所知,它不会检查我的SNAPSHOT jar的新版本是否出现在我当地的maven回购中,对吗?

1 个答案:

答案 0 :(得分:30)

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

install -s mvn:groupid/artifactID/version

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

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

然后卡拉夫知道捆绑的来源。您也可以使用la -u进行检查。这使得karaf显示更新位置,现在应该是maven uri。你不会认为所有karaf包都有这样的更新位置。

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

update <bundleid>

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

您甚至可以使用

进一步自动执行此操作
dev:watch

或karaf 3 +

bundle:watch

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

这也可以与远程调试一起使用。使用

export KARAF_DEBUG=true

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

然后,您可以在同一端口上启动远程调试eclipse会话,并在karaf中很好地调试您的应用程序。即使您使用上述方法之一更改捆绑包,这也可以很好地工作。因此,您可以调试,查找问题,更改代码,构建并使用更改的版本继续调试。

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