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

如何从其他插件获取资源?

胡星汉
2023-03-14

我有2个插件A和b。我在Require-Bundle部分有插件B。但是当我试图从A类中获取B的资源时

ClassFromA.class.getClassLoader().getResource('resource_from_B') 

我得到null。如果我把B的资源(文件夹)放在A的根目录上,一切都像一个魅力。我错过了什么吗?

注:我读了拉尔斯·沃格尔的文章

Bundle bundle = Platform.getBundle("de.vogella.example.readfile");
URL fileURL = bundle.getEntry("files/test.txt");
File file = null;
try {
    file = new File(FileLocator.resolve(fileURL).toURI());
} catch (URISyntaxException e1) {
    e1.printStackTrace();
} catch (IOException e1) {
    e1.printStackTrace();
}

^这个解决方案在我从eclipse运行插件时有效,但当我将插件打包到jar并尝试从本地更新站点安装时

java.lang.IllegalArgumentException: URI is not hierarchical  

附言:我也读过几个关于堆栈溢出的相关问题,但无法找到答案:

  • JavaJar文件:使用资源错误:URI不是分层的
  • 为什么我的URI不是分层的?

解决方案:非常感谢@greg-449。所以正确的代码是:

Bundle bundle = Platform.getBundle("resource_from_some_plugin");
URL fileURL = bundle.getEntry("files/test.txt");
File file = null;
try {
   URL resolvedFileURL = FileLocator.toFileURL(fileURL);

   // We need to use the 3-arg constructor of URI in order to properly escape file system chars
   URI resolvedURI = new URI(resolvedFileURL.getProtocol(), resolvedFileURL.getPath(), null);
   File file = new File(resolvedURI);
} catch (URISyntaxException e1) {
    e1.printStackTrace();
} catch (IOException e1) {
    e1.printStackTrace();
} 

注意:为了正确转义文件系统字符,使用URI的3-arg构造函数也很重要。

共有2个答案

万高洁
2023-03-14
匿名用户

为什么不使用捆绑包?这似乎是OSGi访问资源的方式。

如果使用< code > class fromb . class . get class loader 而不是< code>A,第一次尝试可能会成功。

许嘉福
2023-03-14

使用

java prettyprint-override">FileLocator.toFileURL(fileURL)

而不是FileLocator。当您想将URL与File一起使用时,resolve(fileURL)

当插件打包到jar中时,这将导致Eclipse在临时位置创建一个未打包的版本,以便可以使用File访问该对象。

 类似资料:
  • 我正在使用Eclipse Plugin-in-project开发一个Eclipse插件,它将在工具栏中添加一个菜单项。 请帮我解决这个问题!

  • 我如何通过我自己的API从另一个API获取PDF,然后到前面供用户下载。 我现在得到的只是一张空白页。 后面是Scala的,当我打印文件时,我得到一个字符串。

  • 问题内容: 我有一个包含多个Maven模块的项目 MockIFSClient 访问为 因此 IFSClientTest 运行鳍,因为它们在同一包中。 问题? 尝试访问相同代码的 调用,但现在失败,因为 services / pom.xml 具有以下依赖性 题 我要做出什么改变 这样也可以从不同的模块访问它 问题答案: 这个答案帮助我正确了 如何从Java中的类路径真正读取文本文件 我将代码更改为

  • 问题内容: 假设我在first.com中说一个用户设置了一个cookie。现在,我想通过javascript和ajax在second.com中读取该cookie。但这不起作用。我有xmlHttp.status = 0。 样例代码 在第二个域的readcookie.php文件中 在第一个域cookie.php文件中 问题答案: 您无法从其他域读取Cookie-结尾。 我能想到的唯一方法是将一些代码添

  • 我在Android开发者网站http://developer.Android.com/training/animation/screen-slide.html上学习这个教程 我的情况是...