将 org.apache.felix.scr.annotations 更改为 org.osgi.service.component.annotations 后如何获取服务引用

问题描述 投票:0回答:1

命令错误

20:25:41.655 ERROR [AtomixManager] bundle org.onosproject.onos-core-primitives:3.0.0.SNAPSHOT (234)[org.onosproject.store.atomix.impl.AtomixManager(67)] : The activate method has thrown an exception
java.lang.ClassCastException: class io.atomix.cluster.protocol.HeartbeatMembershipProtocol$Type cannot be cast to class io.atomix.utils.NamedType (io.atomix.cluster.protocol.HeartbeatMembershipProtocol$Type is in unnamed module of loader io.github.classgraph.ClassGraphClassLoader @3ade9526; io.atomix.utils.NamedType is in unnamed module of loader org.apache.felix.framework.BundleWiringImpl$BundleClassLoader @ea65217)
        at io.atomix.core.registry.ClasspathScanningRegistry.lambda$null$1(ClasspathScanningRegistry.java:80)
        at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)
        at io.atomix.core.registry.ClasspathScanningRegistry.lambda$new$2(ClasspathScanningRegistry.java:74)
        at java.base/java.util.Map.computeIfAbsent(Map.java:1003)
        at java.base/java.util.Collections$SynchronizedMap.computeIfAbsent(Collections.java:2682)
        at io.atomix.core.registry.ClasspathScanningRegistry.<init>(ClasspathScanningRegistry.java:68)
        at io.atomix.core.registry.ClasspathScanningRegistry.<init>(ClasspathScanningRegistry.java:43)
        at io.atomix.core.registry.ClasspathScanningRegistry$Builder.build(ClasspathScanningRegistry.java:215)
......
at org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:328)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:929)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:915)
        at org.apache.felix.scr.impl.manager.RegistrationManager.changeRegistration(RegistrationManager.java:133)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.registerService(AbstractComponentManager.java:984)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:752)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.enableInternal(AbstractComponentManager.java:674)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager$1.run(AbstractComponentManager.java:461)
        at org.apache.felix.scr.impl.ComponentActorThread.run(ComponentActorThread.java:114)

我添加了一些编译依赖项 例如在 features.xml 中

<bundle>mvn:org.osgi/org.osgi.resource/1.0.0</bundle>
<bundle>mvn:org.osgi/org.osgi.service.component/1.4.0</bundle>
<bundle>mvn:org.osgi/org.osgi.service.component.annotations/1.4.0</bundle>
<bundle>mvn:org.osgi/org.osgi.service.metatype.annotations/1.4.0</bundle>

但它无法解决问题 这就是我得到的,我无法修复它 控制台无法获取捆绑包、服务或组件等。 任何人都可以给我一些建议, 预先感谢您!

annotations osgi apache-karaf onos apache-karaf-feature
1个回答
0
投票

原因是 io.github.classgraph 加载类 io.atomix.utils.NamedType io.atomix.cluster.protocol.HeartbeatMembershipProtocol$Type 而 org.apache.felix.framework 加载类 io.atomix.utils.NamedType,但 HeartbeatMembershipProtocol $Type 应该类型转换为 NamedType。

解决的方法是在pom.xml中添加一些DynamicImport-Package属性

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>4.1.0</version>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    <DynamicImport-Package>io.atomix.cluster.*,io.atomix.primitive.*,io.atomix.core.*,io.atomix.protocols.*</DynamicImport-Package>
                </instructions>
            </configuration>
        </plugin>
    </plugins>
</build> 

因此,当加载您的包时,依赖项 jar 也将被加载。

感谢那些给我线索的人!

© www.soinside.com 2019 - 2024. All rights reserved.