执行 java.io.File 或 FileInputStream 时如何引用 OSGi 包中包含的文件

2023-11-25

我正在使用 aQute Bnd 工具集创建 OSGi 捆绑包,并打包了一些依赖的“资源”文件。这包括我创建的资源目录中的 *.css 文件和 *.xsd 文件。

我已将以下内容包含在捆绑包.bnd file:

Include-Resource: resources/=resources/ 

当我进行构建时,生成的 *.jar 文件在 jar 包文件顶部目录的 resources 目录中包含 *.css 和 *.xsd 文件。

然而,在实际代码中,我很难尝试将其引用为我的类路径的一部分:

我已经尝试过以下方法:

new File("resources/example.css");

我也尝试过:

URL cssFile = this.getClass().getResource("resources/example.css");
try
{
   file = new File(cssFile.toURI()));
}
catch(Exception e)
{
   e.printStackTrace();  
}

我要么收到 NullPointException 错误,要么收到 File can not be find IOException 错误(具体取决于我使用哪一个)。在调试配置模式下的 Eclipse Equinox 以及 Apache Felix(我们用于部署)中运行时,我收到此错误。注意我试图在 BundleActivator 之外的 Java 类中执行此操作。

我是否需要始终参考 BundleActivator 的上下文,例如?

 /*
 * (non-Javadoc)
 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
 */
 @Override
 public void start(BundleContext context) throws Exception 
 {   
     /* Service to host the Bundle interface. */
     ServletContainerService service = new ServletContainerService();
     service.addServlet(new ServletContainer(new AxisServlet(), true));
     this.serverReg = context.registerService(ServletContainerService.class.getName(), service, null);

     cssFile = new File(context.getClass.getResource("resource/example.css")); 
 }

我认为上面的方法可行,但意味着我必须传递 cssFile 引用,这看起来并不优雅。

有没有什么方法可以引用作为bundle/.jar 文件一部分的任何给定Java 类中包含在bundle jar 文件中的“resources”目录的路径?如果涉及到BundleContext,有没有办法在任何Java类中引用它?

任何帮助都感激不尽。


我已经看过并且包含 OSGi 捆绑包中的附加资源但看来您需要 BundleContext。

我可能已经找到了一个可能的解决方案:http://www.vogella.de/blog/tag/plugin/

看起来 Vogella 有一些示例代码:

URL url;
try {
        url = new URL("platform:/plugin/de.vogella.rcp.plugin.filereader/files/test.txt");
    InputStream inputStream = url.openConnection().getInputStream();
    BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
    String inputLine;

    while ((inputLine = in.readLine()) != null) {
        System.out.println(inputLine);
    }

    in.close();

} catch (IOException e) {
    e.printStackTrace();
}

有谁知道如果它不是插件并且我使用不同的 OSGi 环境(例如),该路径是否相同。 Equinox Eclipse 与 Apache Felix? 例如url = new URL("platform:/plugin/de.vogella.rcp.plugin.filereader/files/test.txt");


The 捆绑接口 has a getEntry(java.lang.String path)返回 Url 的方法并记录为:

返回此捆绑包中指定路径处的条目的 URL。该包的类加载器不用于搜索该条目。仅搜索此捆绑包的内容来查找条目。 指定的路径始终相对于该包的根目录,并且可以以“/”开头。路径值“/”表示该包的根。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

执行 java.io.File 或 FileInputStream 时如何引用 OSGi 包中包含的文件 的相关文章

随机推荐

  • 在 Tapestry 5 中更新表单内的区域

    我有一个Zone里面一个Form the Zone已更新为包含我想绑定到父级的输入字段的块Form 不幸的是 这似乎并不像我希望的那么容易 因为我收到了以下错误消息 The Description component must be enc
  • FireFox 位于“从...传输数据”或“读取...”

    我正在使用 Selenium 为网站构建一些功能测试 但我遇到了一个奇怪的浏览器问题 页面似乎永远无法完成加载 状态栏显示 正在从 传输数据 或 读取 由于页面永远不会完成加载 我的硒测试超时 该问题似乎只发生在 FireFox 上 我们的
  • cv2.connectedComponents 未检测到组件

    我使用的是 Ubuntu python 2 7 使用 OpenCV 我试图准确理解函数 cv2 connectedComponents 正在做什么 这是图像 代码 import cv2 import numpy as np img cv2
  • 在 Django 中动态删除内联表单集

    是否可以让 Django 自动删除请求中不存在的表单集 例如 如果在加载编辑页面时我有三个以 HTML 表示的内联表单集 并且在处理请求时使用 javascript 删除其中两个表单集 则 Django 会发现这两个表单不再是它们的 并将它
  • Angular 6 / NGRX 联合减速机

    我正在使用 Angular 6 w NgRX 4 我有多个想要组合的减速器 应用程序模块 ts import BrowserModule from angular platform browser import NgModule from
  • 如果父级有 ng-if,Angular ng-show 不起作用

    我有一个视图 其中父 div 上有 ng if 而某些子元素上有 ng show 当嵌套在带有 ng if 的元素下时 ng show 似乎无法正常工作 这是 Angular 的错误还是我做错了什么 看看这个笨蛋 HTML div div
  • 使 Java 属性跨类可用?

    我选择使用属性文件来自定义某些设置 我使用以下代码使属性对象在类中可用 Properties defaultProps new Properties try FileInputStream in new FileInputStream cu
  • 如果使用 jQuery 文本为“0”,如何隐藏“span”?

    我正在寻找隐藏包含 0 的跨度 我查看了其他代码并尝试对其进行调整 但无法使其正常工作 我希望它仅在内容为 0 时隐藏跨度 但是当运行下面的代码时 它也会隐藏任何包含 0 的数字 例如 10 这是我不想要的 为了更清楚一点 跨度只应在其内部
  • 在不相关的文件中“无法重新声明块范围变量”

    有一个简单的 TS 包用作 CommonJS 模块并且没有导出 TS文件被编译为同名的JS文件并用作require package option foo tsconfig json compilerOptions target es5 选项
  • 如何通过 Javascript 将图像添加到按钮?

    我正在尝试使用 Javascript 将图像添加到按钮 但我似乎无法让它工作 我已经使用 HTML5 成功添加了图像 但是 根据我的需要 我需要通过 javascript 添加图像 以下是我编写的通过 HTML 添加图像的内容
  • Javascript 可以帮我按 Enter 键吗?

    有一个网站 我想在我离开时继续按 Enter 键 是否可以做类似的事情 setInterval function have javascript press the button with a certain id 100 我想把它放在智能
  • light gbm - python API 与 Scikit-learn API

    我正在尝试应用 LightGBM 并已经完成了 Python API文档 Training API 和 Scikit learn API 有什么区别吗 我们可以使用这两个 API 来针对同一问题获得相同的结果吗 简短的回答 是的 如果您以相
  • 如何在 tomcat 中从 Filter 类方法响应 servlet 客户端时设置 http 状态代码

    我正在用 spring 编写一个 web 服务 这个问题与 spring 无关 它实现了一个 希望 restful api 据我了解 所有响应都应采用 xml 或 json 格式 在大多数情况下 这并不是什么大问题 但在一种情况下这似乎是不
  • 如何有条件地选择numpy数组中的元素

    有人可以帮助我有条件地选择 numpy 数组中的元素吗 我正在尝试返回大于阈值的元素 我目前的解决方案是 sampleArr np array 0 725 0 39 0 99 condition sampleArr gt 0 5 extra
  • 使用 openssl verify 验证证书链

    我正在使用以下组件构建自己的证书链 Root Certificate Intermediate Certificate User Certificate 根证书是自签名证书 中间证书由根证书和中间证书由用户签名 现在我想验证用户证书是否具有
  • java8 -XX:+UseCompressedOops -XX:ObjectAlignmentInBytes=16

    所以 我试图运行一些简单的代码 jdk 8 通过 jol 输出 System out println VMSupport vmDetails Integer i new Integer 23 System out println Class
  • 错误对象属性无法通过 for 循环迭代

    我经常使用for循环来迭代JavaScript对象 直到今天才发现问题 当我试图了解 Error 对象具有哪些属性时 我感到很惊讶 var e new Error testing for var key in e console log e
  • Android:如何加载 KML

    有人可以告诉我是否有一种方法可以将 kml 文件加载到 android 中的谷歌地图中 thanks 请在此处找到一个代码示例 该示例从 google 获取 kml 数据并将其绘制到地图上 如何使用kml文件在地图上绘制路径
  • “PIVOT”附近的语法不正确

    我正在运行 SQL Server 2008 R2 我正在尝试构建一个表 该表从结构如下的表中获取数据 company ded id descr 10 1 MEDINS 10 2 LIFE 10 3 PENSN 10 50 DOMREL 我需
  • 执行 java.io.File 或 FileInputStream 时如何引用 OSGi 包中包含的文件

    我正在使用 aQute Bnd 工具集创建 OSGi 捆绑包 并打包了一些依赖的 资源 文件 这包括我创建的资源目录中的 css 文件和 xsd 文件 我已将以下内容包含在捆绑包 bnd file Include Resource reso