我决定在OSGI和Karaf之上构建一个应用程序 - 我真的很喜欢这个东西。但是,我在本地开发机器上进行日常部署时遇到了一些困难。我的意思是..我做了一个改变,然后我想在我当地的Karaf实例上进行测试。它可能发生在每小时几次。
我现在这样做的方式是创建一个JAR包的maven构建,然后将其复制到Karaf的deploy目录中。我认为它根本不优雅。
我试图寻找解决方法(谷歌)。我读到了Karaf的功能,但似乎尽管它是一个很好的机制来部署整个应用程序,但它并没有解决我的问题。据我所知,它不会检查我的SNAPSHOT jar的新版本是否出现在我当地的maven回购中,对吗?
答案 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自己的捆绑包。