gpt4 book ai didi

java - 一个类,两个类加载器

转载 作者:行者123 更新时间:2023-12-01 13:46:36 26 4
gpt4 key购买 nike

我正在尝试从 Intellij 中的 eclipse 启动一些 bundle 。问题出在我这样做之后:

FrameworkFactory fFactory = ServiceLoader.load(FrameworkFactory.class).iterator().next();
Framework framework = fFactory.newFramework(config);...
context = framework.getBundleContext();
bundle = context.installBundle(myBundle);
bundle.start();

并且我想使用我的 Bundle 中的类,我看到我的类被另一个类加载器再次加载。那么,我应该怎么做才能使用启动 bundle 时加载的相同类?这两个类加载器是:

org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader
java.net.URLClassLoader

最佳答案

这通常是由于 Import-Package 和 Export-Package header 的规范不正确造成的。确保您引用的类是从同一个包中导入的。在这种情况下,该类的类加载器将是相同的。

当然,除非您真的问为什么框架内的类(因此从您启动的包中)不是由框架外部的相同类加载器加载(在本例中是启动框架的代码)。在这种情况下,答案是:永远不会(除了 JVM Bootstrap 本身加载的类之外),我建议您更好地理解 OSGi 中的框架概念。

关于java - 一个类,两个类加载器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20324015/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com