如何使用 运行 Apache Felix 从 Maven 工件更新包

How to update a bundle from Maven artifact with running Apache Felix

目前我有这样一种情况,我开发了一个项目,然后 运行 mvn install 并将它作为一个简单的 JAR 文件放入我的本地 Maven 存储库

然后,我有一个由其他人 "environment" 制作的作品,其中包括很多捆绑包和东西,最终 运行 通过 mvn pax:run 并且大约需要 5 分钟至 运行

我希望能够 运行 felix:update <bundle-name> 但我无法填补本地 Maven 存储库中的 Maven JAR 工件与我可以准备好供应的捆绑包之间的空白放在某个地方只是 运行 felix:update 或其他什么,也许 uninstall/install

当我尝试 运行 mvn pax:create-bundle 我的项目时,它抛出一个 Containing project does not have packaging type 'pom' 异常

非常感谢任何帮助

更新:我注意到重新安装的捆绑包的问题始于它的激活器,带有 ClassNotFoundException(尽管提到的 class 一直存在于捆绑包中,所以它一定是 class路径,类加载器设置或其他)

at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation BundleWiringImpl.java:1574 at org.apache.felix.framework.BundleWiringImpl.access0 BundleWiringImpl.java:79 at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass BundleWiringImpl.java:2018 at java.lang.ClassLoader.loadClass ClassLoader.java:357 at some.external.adapters.package.guice.SomeModule.configure SomeModule.java:46 at com.google.inject.AbstractModule.configure AbstractModule.java:59

如果您有新构建的包的文件路径,您可以从 Gogo shell 更新它,如下所示:

felix:update <bundleid> file:/path/to/file
refresh

其中 <bundleid> 是您要更新的捆绑包的数字 ID。如果任何包依赖于您正在更新的包或从您正在更新的包中导入包,则需要 refresh 命令;此命令将导致框架尝试 re-resolve 使用新的依赖项。

我很高兴接受@neil-bartlett的回答,尽管我必须添加更多上下文:

1) 我最初遇到的最大问题之一是本地 Maven 存储库中的 JAR-file 与 OSGi 包不同。为了创建捆绑包,我必须在 mvn install 之后 运行 mvn bundle:bundle。并且在 target/ 文件夹中创建了捆绑包。

2) 之后,在 GoGo shell 中,我确实可以 运行 felix:update <bundle-id> file:C:/Users/blablabla/bundle-SNAPSHOT-2.0.jar,出于某些原因,这些天它 可以正常工作 [=21] =].原始 post 的更新中提到的异常确实发生了,但它们不会阻止更新包的正确安装。