当前位置: 首页 > 知识库问答 >
问题:

导入的片段包是否包含在主机包类路径中?

公冶渝
2023-03-14

我有一个第三方包foo。我不能以任何方式修改foo。包包含以下类:

public class Serializer {
    public String summarizeClass(String className) {
        Class<?> myClass = Class.forName(className);
        ...
    }
}

如果我从org.mypackage.myclass的包bar调用此方法,它将失败,因为myclass不在包foo的类路径上。

我可以简单地添加一个片段foo.fragment来修改bundlefoo的类路径吗?还是这种依赖关系只适用于片段内的类?

长话短说:当在主机包的类中执行时,OSGi中的class.forName()的语义是什么?是否包括:

  • 问:捆绑类?A:是的。
  • 问:片段中包含的类?A:是的。来源
  • 问:导入的包和从所需包导出的包?A:是的。
  • 问:导入的包裹和导出的包裹需要所有碎片的捆束?A:我不知道。

共有1个答案

卢志强
2023-03-14

请参阅OSGi核心规范5.0.0版的第3.14节。

摘要:您可以添加一个只有Import-Package头或Require-Bundle头的片段。这些标头中的子句被附加到主机包中的相应标头中。因此,如果您添加:

 Fragment-Host:  Foo;version="[1,2)"
 Import-Package: org.myPackage;version="[1,2)"

那么Foo包将能够看到您的MyClass。

 类似资料:
  • 我在Eclipse中创建了一个Java项目,并创建了一个带有main方法的简单类。 问题:当我运行程序(没有任何服务器等)时,我收到以下错误: 线程“main”java中出现异常。lang.NoClassDefFoundError:org/apache/commons/codec/DecoderException at autoPEC。main(autoPEC.java:6)由:java引起。la

  • 问题内容: 是否可以指定一个Java ,其中包含另一个JAR文件中包含的JAR文件? 问题答案: 如果您试图创建一个包含应用程序及其所需库的jar,则有两种方法(我知道)。第一个是One-Jar,它使用特殊的类加载器来允许jar的嵌套。第二个是UberJar(或Shade),它会爆炸包含的库并将所有类放在顶级jar中。 我还应该提到UberJar和Shade分别是Maven1和Maven2的插件。

  • 问题内容: 我目前正在尝试获取我的HBase代码以使用hbase-site.xml中指定的设置。似乎使用的是默认设置,而不是hbase- site.xml配置文件中指定的设置。自更新文件以来,我已经重新启动了HBase群集,但是它仍未使用我更新的配置文件。 我正在使用的群集有2个节点,其中一个是主节点。两个节点上的配置文件都将主节点的IP指定为Zookeeper仲裁。我相信问题在于我没有使用hba

  • 问题内容: 我有/root/update/test.php文件。还有一个文件/root/connect.php; 该文件有一行 在/root/update/test.php中。有代码 当我运行/root/update/test.php时,它找到connect.php,但是找不到config.php,这给了我 这让我感到困惑,因为这些警告使我似乎似乎在正确地进行所有操作-包含路径为/ root,并且

  • 在Quarkus中,要将随机文件包含为类路径资源,我们使用<code>Quarkus.native.resources。包括(https://quarkus.io/guides/writing-native-applications-tips#including-资源)。 如何在文件系统中包含文件?即使用读取的内容。 如果我们使用Jib,我们只需将这些文件放在< code>src/main/jib

  • 我有一个活动,它包含一个片段容器(FrameLayout),我在Activity.onCreate()期间在其中放置了一个片段。片段包含一个包含一串片段的ViewPager。所有这些工作都很好。页面内容显示,我可以很好地在页面中滑动,甚至可以看到操作栏中的操作,因为贡献的页面变得可见。 现在我用另一个片段替换包含ViewPager的片段: 此外,我已经用FragmentPagerAdapter替换