如何使用 运行 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 的更新中提到的异常确实发生了,但它们不会阻止更新包的正确安装。
目前我有这样一种情况,我开发了一个项目,然后 运行 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 的更新中提到的异常确实发生了,但它们不会阻止更新包的正确安装。