繁体   English   中英

OSGI:在片段中的另一个捆绑软件中使用代码

[英]OSGI: Using code in another bundle from a fragment

我想使用一个Manifest.mf将OSGI片段添加到一个包中,在这里到“ org.eclipse.equinox.http.jetty”中:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: JettyCustomize
Bundle-SymbolicName: com.company.st.console.jetty.customize
Bundle-Version: 1.0.0.qualifier
Bundle-Vendor: Company
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Fragment-Host: org.eclipse.equinox.http.jetty

不幸的是,我的代码需要在其他捆绑软件中定义的代码,此处为“ org.eclipse.jetty.io”。 因此,我将以下行添加到清单中:

Import-Package: org.eclipse.jetty.io

现在-在Eclipse中-代码可以编译。 但是,当我启动应用程序时,出现以下异常( MyJettyCustomizerMyJettyCustomizer中的类,每次反射时片段宿主“ org.eclipse.equinox.http.jetty”中的代码使用该类):

java.lang.ClassNotFoundException: com.company.st.console.jetty.customize.MyJettyCustomizer cannot be found by org.eclipse.equinox.http.jetty_3.4.0.v20170503-2025
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:484)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:395)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:387)
    at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:150)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at org.eclipse.equinox.http.jetty.internal.HttpServerManager.createJettyCustomizer(HttpServerManager.java:232)
    at org.eclipse.equinox.http.jetty.internal.HttpServerManager.updated(HttpServerManager.java:74)
    at org.eclipse.equinox.http.jetty.internal.Activator.start(Activator.java:62)
    at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:779)
    at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:1)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:772)
    at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:729)
    at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:933)
    at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:309)
    at org.eclipse.osgi.container.Module.doStart(Module.java:581)
    at org.eclipse.osgi.container.Module.start(Module.java:449)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1628)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1608)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1579)
    at org.eclipse.osgi.container.SystemModule.startWorker(SystemModule.java:264)
    at org.eclipse.osgi.container.Module.doStart(Module.java:581)
    at org.eclipse.osgi.container.Module.start(Module.java:449)
    at org.eclipse.osgi.container.SystemModule.start(SystemModule.java:188)
    at org.eclipse.osgi.internal.framework.EquinoxBundle.start(EquinoxBundle.java:383)
    at org.eclipse.osgi.internal.framework.EquinoxBundle.start(EquinoxBundle.java:402)
    at org.eclipse.osgi.launch.Equinox.start(Equinox.java:115)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.startup(EclipseStarter.java:326)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:239)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:653)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:590)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1499)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1472)

如果我从MyJettyCustomizer删除了需要“ org.eclipse.jetty.io”的代码,并再次从清单中删除了“ Import-Package:org.eclipse.jetty.io”行,则运行时和MyJettyCustomizer类都不会出现异常已正确加载。

那么,是否有可能我可以使用OSGI片段中另一个捆绑软件中的代码?

您是否碰巧将com.company.st.console.jetty.customize包放在一个以上的包/片段中? 看来是分包问题!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM