我有2个plguins甲和乙。在A的MANIFEST.MF中,我在Require-Bundle部分中确实有插件B。但是,当我试图让B的从资源一个样
ClassFromA.class.getClassLoader().getResource('resource_from_B')
我越来越空了。如果我将B的资源(文件夹)放在A的根目录,则所有内容都像一个魅力。我想念什么吗?
注意:我阅读了Lars Vogel的文章
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
PS我也已经阅读了StackOverflow上的几个相关问题,但找不到答案:
解决方案:非常感谢@ 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构造函数以正确转义文件系统字符也很重要。
利用
FileLocator.toFileURL(fileURL)
而不是FileLocator.resolve(fileURL)
将URL与一起使用时File
。
将插件打包到jar中后,这将导致Eclipse在临时位置创建一个未打包的版本,以便可以使用来访问该对象File
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句