osgi - 将 karaf 从 4.0.4 升级到 4.1.7 后出现 ClassNotFoundException
问题描述
我们使用 org.apache.karaf.shell.api.action.Action 创建了一个 karaf 命令。
public class MyCommandIpl implements MyCommand {
@Override
public executeCOmmand() {someObj.execute;
}
}
它在 karaf 4.0.4 版中运行良好。但是当我们将 karaf 版本升级到 4.1.7 时,这个包的热部署导致以下异常,
java.lang.IllegalArgumentException: Bean class not found com.subhash.command.MyCommandIpl
at org.apache.aries.jpa.blueprint.impl.JpaComponentProcessor.handleComponent(JpaComponentProcessor.java:99)
at org.apache.aries.jpa.blueprint.impl.JpaComponentProcessor.process(JpaComponentProcessor.java:77)
at org.apache.aries.blueprint.container.BlueprintContainerImpl.processProcessors(BlueprintContainerImpl.java:549)
at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:394)
at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:275)
at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:300)
at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:269)
at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:265)
at org.apache.aries.blueprint.container.BlueprintExtender.modifiedBundle(BlueprintExtender.java:255)
at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:500)
at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:433)
at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$AbstractTracked.track(BundleHookBundleTracker.java:725)
at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.bundleChanged(BundleHookBundleTracker.java:463)
at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$BundleEventHook.event(BundleHookBundleTracker.java:422)
at org.apache.felix.framework.util.SecureAction.invokeBundleEventHook(SecureAction.java:1179)
at org.apache.felix.framework.EventDispatcher.createWhitelistFromHooks(EventDispatcher.java:730)
at org.apache.felix.framework.EventDispatcher.fireBundleEvent(EventDispatcher.java:485)
at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4579)
at org.apache.felix.framework.Felix.startBundle(Felix.java:2174)
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998)
at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundle(DirectoryWatcher.java:1260)
at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundles(DirectoryWatcher.java:1233)
at org.apache.felix.fileinstall.internal.DirectoryWatcher.doProcess(DirectoryWatcher.java:520)
at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:365)
at org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:316)
Caused by: java.lang.ClassNotFoundException: com.subhash.command.MyCommandIpl not found by deadlock-test-tool [507]
at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1639)
at org.apache.felix.framework.BundleWiringImpl.access$200(BundleWiringImpl.java:80)
at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:2053)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.apache.felix.framework.Felix.loadBundleClass(Felix.java:1927)
at org.apache.felix.framework.BundleImpl.loadClass(BundleImpl.java:978)
at org.apache.aries.jpa.blueprint.impl.JpaComponentProcessor.handleComponent(JpaComponentProcessor.java:97)
... 24 more
pom有以下数据的地方
build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>${maven.jar.plugin.version}</version>
<configuration>
<excludes>
<exclude>**/log4j.xml</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Karaf-Commands>com.subhash.command*</Karaf-Commands>
<_removeheaders>Import-Service,Export-Service</_removeheaders>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
请帮忙!
解决方案
推荐阅读
- angular - ion-input:检查 ionInput 上的输入并将焦点设置在下一个字段上
- mainframe - 使用 EXECIO 将 rexx 输出逻辑写入数据集?
- python - 命令错误退出状态 1:- Pytorch 对象检测
- python - 即使安装成功也无法导入sklearn
- eclipse - Eclipse Project Expoloer Active Highlite 颜色
- unreal-engine4 - UnrealEngine 4.26.0 (Preview2) 中的 MultiSphereTraceByChannel 问题
- ceph - 如何重新加入 Mon 和 mgr Ceph 到集群
- oracle - 如何获取 VNIC 中的所有 IP [Oracle Cloud Using API]
- azure - Azure 通过 DevOps 监控数据收集规则 (DCR)
- javascript - 将地图返回的对象分散到一个对象中