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

Mic*_*udy 18 osgi maven apache-karaf osgi-bundle karaf

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

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

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

Chr*_*der 31

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

install -s mvn:groupid/artifactID/version
Run Code Online (Sandbox Code Playgroud)

要么

install -s mvn:groupid/artifactID/version/typeOfMavenArtifact
Run Code Online (Sandbox Code Playgroud)

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

然后卡拉夫知道捆绑来自哪里.你也可以用它来检查la -u.这使得karaf显示更新位置,现在应该是maven uri.你不会所有的karaf包都有这样的更新位置.

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

update <bundleid>
Run Code Online (Sandbox Code Playgroud)

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

您甚至可以通过使用来进一步自动化

dev:watch
Run Code Online (Sandbox Code Playgroud)

或者对于karaf 3+

bundle:watch
Run Code Online (Sandbox Code Playgroud)

这将使karaf检查您的maven repo,了解它已部署的SNAPSHOT捆绑包的变化并自动重新部署这些变化.

这也与远程调试一起很好地工作.使用

export KARAF_DEBUG=true
Run Code Online (Sandbox Code Playgroud)

在开始卡拉夫之前.然后它将在端口5005上侦听调试器.

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

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

  • 好的,我们找到了修复快照的方法 - 不从远程回购问题下载.我们必须添加`aether.updateCheckManager.sessionState = false`的系统属性.然后它每次都检查远程仓库,而不是每次会话只检查一次. (3认同)
  • 我们几乎尝试了所有可能的操作,并从日志中意识到问题出在与以太组件有关,该组件据说不是从远程仓库中进行更新,因为它已经“已经更新了该会话”或类似的东西。我办公室的另一位开发人员研究了源代码,他发现该系统属性可以控制基于会话的检查。 (2认同)