加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何在另一个jar中获取资源

发布时间:2020-12-15 08:37:13 所属栏目:Java 来源:网络整理
导读:我有一个嵌入在一个包中的jar,需要获取与它一起打包的资源,如下所示: MyBundle - src -lib -MyEmbeddedJar -src -SomeClass -someResource.xml 我试图从’SomeClass’访问’someResource.xml’,如下所示: SomeClass.class.getResource( "someResourc
我有一个嵌入在一个包中的jar,需要获取与它一起打包的资源,如下所示:

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

我试图从’SomeClass’访问’someResource.xml’,如下所示:

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

但我没有运气.我已经尝试了附加CWD的几个变体(例如:’./ someResource.xml’),但我无法加载此资源.

我知道“正确”的方法是使用Activator来获取正确的类加载器,但嵌入式jar可以在其他项目中使用,所以我不想为了获得它而必须添加OSGi特定代码与OSGi玩得很好.

有没有其他方法可以在OSGi的OSGi中加载资源?

解决方法

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

在这种情况下,无法在非OSGi上下文中实现这一点.让我们孤立地看一下这两种情况.

在OSGi中

使用常规(非特定于OSGi)的资源加载机制可以很好地访问someResource.xml,前提是可以从Bundle-ClassPath访问它.例如,如果您有以下清单标题,

Bundle-ClassPath: .,somejar.jar

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

不使用OSGi

如果您没有使用OSGi,那么就没有(相当简单的)方法来获取我所知道的内部jar中的类和资源.

你的选择

根据您希望捆绑包的外观,您现在有两种选择.

> SomeClass是否真的有必要在嵌入式jar中?如果是这样,你就会感到茫然,而你的jar只会使用OSGi.
>如果您可以选择将somejar.jar’解包’到您的jar中,则可以解决问题,并且您的jar可以在两种情况下都能正常工作.

就个人而言,我会选择选项2:除非你有资源在你’合并’罐子时可能会互相覆盖,所以在你的包里面有一点点资源是没有问题的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读