gpt4 book ai didi

java - 如何获取另一个jar中的资源

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:34:38 24 4
gpt4 key购买 nike

我有一个嵌入包中的 jar,需要像这样获取与其打包的资源:

MyBundle
-\ src
-\lib
-\MyEmbeddedJar
-\src
-\SomeClass
-\someResource.xml

我正在尝试从“SomeClass”访问“someResource.xml”,如下所示:

SomeClass.class.getResource( "someResource.xml" ); 

但是我运气不好。我已经尝试了几种附加了 CWD 的变体(例如:“./someResource.xml”),但我就是无法加载此资源。

我知道“正确”的方法是使用 Activator 将钩子(Hook)返回到正确的类加载器,但是嵌入式 jar 可以在其他项目中使用,所以我不想只向它添加 OSGi 特定代码让它与 OSGi 一起很好地发挥作用。

是否有任何其他方式可以在 OSGi 中加载资源而不依赖于 OSGi?

最佳答案

我假设 SomeClass 在嵌入式 jar 中(例如,somejar.jar),而 someResource.xml 在外部 jar 中,在 lib 目录中。

在这种情况下,无法在非 OSGi 上下文中实现它。让我们分别来看这两种情况。

在 OSGi 中

您的 someResource.xml 应该可以使用常规(非 OSGi 特定的)资源加载机制很好地访问,提供它可以从 Bundle 访问-类路径。例如,如果您有以下 list header ,

Bundle-ClassPath: ., somejar.jar

您将能够使用"lib/someResource.xml" 访问您的资源。注意类路径上的点:这意味着您可以从 jar 的根目录访问类和资源。如果您忘记了这一点,您将只能访问 somejar.jar 中的类和资源。

不使用 OSGi

如果您不使用 OSGi,就我所知,没有(相当简单的)方法可以访问内部 jar 中的类和资源。

您的选择

根据您希望 bundle 的外观,您现在有两种选择。

  1. SomeClass 真的有必要放在嵌入式 jar 中吗?如果是这样,您将不知所措,并且您的 jar 只能使用 OSGi 工作。
  2. 如果您可以选择将 somejar.jar“解压”到您的 jar 中,您就可以解决问题,并且您的 jar 可以在两种情况下工作。

就我个人而言,我会选择选项 2.:除非您的资源在“合并”jar 时可能会相互覆盖,否则在您的包中放置一些资源完全没有问题。

关于java - 如何获取另一个jar中的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4505252/

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