【问题标题】:Dependency unavailable (ClassNotFound) in OSGi Bundle under Apache FelixApache Felix 下 OSGi Bundle 中的依赖关系不可用 (ClassNotFound)
【发布时间】:2012-04-19 02:14:44
【问题描述】:

我正在尝试在由 maven 构建的 OSGi Bundle 中使用 Apache Commons JCI 库。 我在 Apache Felix 上安装了捆绑包,一切看起来都很好,直到我尝试启动我的组件,这就是我收到以下错误的时候。我的 pom.xml 看起来像:

<Embed-Dependency>jtidy;scope=compile|runtime;inline=false</Embed-Dependency>
<Embed-Directory>target/dependency</Embed-Directory>
<Embed-StripGroup>true</Embed-StripGroup>

<Export-Package>
    ${project.artifactId}.*;version=${project.version},
    org.apache.jsp.apps.*;version=${project.version}
</Export-Package>                        

<Import-Package>*;resolution:=optional</Import-Package>
<Private-Package></Private-Package>

<Include-Resource>
    {maven-resources},
    {maven-dependencies},
    src/main/scripts
</Include-Resource>

我只是依赖于:

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-jci-core</artifactId>
        <version>1.0</version>
    </dependency>

我尝试将 commons-jci-core 显式添加到 Embed-Dependency 和 Import-Pacakage 指令中,但无济于事。任何想法如何嵌入此依赖项以便我的包可以看到它?

这是我收到的错误:

18.04.2012 22:08:01.328 *ERROR* [FelixPackageAdmin] com.activecq.tools [com.activecq.tools.services.impl.VaultSyncImpl] Error during instantiation of the implementation object (java.lang.NoClassDefFoundError: org/apache/commons/jci/monitor/FilesystemAlterationListener) java.lang.NoClassDefFoundError: org/apache/commons/jci/monitor/FilesystemAlterationListener
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
    at java.lang.Class.getConstructor0(Class.java:2699)
    at java.lang.Class.newInstance0(Class.java:326)
    at java.lang.Class.newInstance(Class.java:308)
    at org.apache.felix.scr.impl.manager.ImmediateComponentManager.createImplementationObject(ImmediateComponentManager.java:183)
    at org.apache.felix.scr.impl.manager.ImmediateComponentManager.createComponent(ImmediateComponentManager.java:118)
    at org.apache.felix.scr.impl.manager.AbstractComponentManager$Unsatisfied.activate(AbstractComponentManager.java:997)
    at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:333)
    at org.apache.felix.scr.impl.manager.AbstractComponentManager.enable(AbstractComponentManager.java:157)
    at org.apache.felix.scr.impl.config.ConfiguredComponentHolder.enableComponents(ConfiguredComponentHolder.java:262)
    at org.apache.felix.scr.impl.BundleComponentActivator.loadDescriptor(BundleComponentActivator.java:253)
    at org.apache.felix.scr.impl.BundleComponentActivator.initialize(BundleComponentActivator.java:147)
    at org.apache.felix.scr.impl.BundleComponentActivator.<init>(BundleComponentActivator.java:111)
    at org.apache.felix.scr.impl.Activator.loadComponents(Activator.java:285)
    at org.apache.felix.scr.impl.Activator.bundleChanged(Activator.java:203)
    at org.apache.felix.framework.util.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:807)
    at org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:729)
    at org.apache.felix.framework.util.EventDispatcher.fireBundleEvent(EventDispatcher.java:610)
    at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:3724)
    at org.apache.felix.framework.Felix.startBundle(Felix.java:1772)
    at org.apache.felix.framework.Felix$RefreshHelper.restart(Felix.java:4498)
    at org.apache.felix.framework.Felix.refreshPackages(Felix.java:3554)
    at org.apache.felix.framework.PackageAdminImpl.run(PackageAdminImpl.java:336)
    at java.lang.Thread.run(Thread.java:680)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.jci.monitor.FilesystemAlterationListener not found by com.activecq.tools [170]
    at org.apache.felix.framework.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:787)
    at org.apache.felix.framework.ModuleImpl.access$400(ModuleImpl.java:71)
    at org.apache.felix.framework.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1768)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    ... 25 more

【问题讨论】:

    标签: maven osgi bundle classnotfoundexception


    【解决方案1】:

    原来我需要嵌入:

    <Embed-Dependency>
        commons-jci-fam;scope=compile|runtime;inline=false,
        commons-jci-core;scope=compile|runtime;inline=false
    </Embed-Dependency>
    

    FilesystemAlterationListener在fam项目中,其他依赖需要core项目。

    【讨论】:

    • 抱歉 - 必须等待 2 天才能完成。谢谢你的提醒:)
    猜你喜欢
    • 2015-10-05
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    • 1970-01-01
    • 2013-02-01
    • 2017-03-05
    • 2014-11-01
    相关资源
    最近更新 更多