在插件中的相对路径中查找资源的问题

时间:2015-04-14 08:02:01

标签: eclipse-plugin eclipse-rcp

我的插件有html文件资源,它显示在SWT浏览器小部件上。

我可以使用以下代码从我的插件侧的资源文件夹中找到此html文件:

public File resolveResource(URL url) {
    File resolvedFile = null;
    try {
        URL resolvedFileURL = FileLocator.toFileURL(url);
        URI resolvedURI = new URI(resolvedFileURL.getProtocol(), resolvedFileURL.getPath(), null);
        resolvedFile = new File(resolvedURI);
    } catch (Exception e) {
      // exception handling
    }
    return resolvedFile;
}

现在这个html文件资源引用了一些css,这些图像存在于插件内的同一资源文件夹中。

问题是当我打包并部署插件并尝试运行它时 - 图像和css没有显示/解析。

当我从IDE运行'Eclipse Application'时,这很好用。

HTML文件资源:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <head>
        <meta name="viewport" content="initial-scale=1.0; maximum-scale=1.0; minimum-scale=1.0; user-scalable=no; width=device-width" />
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
        <link rel="stylesheet" href="css/styles.css" type="text/css" />
    </head>
    <body>
        <div class="content" id="parent">
        </div>
        <div class="footer">
            All contents copyright 2014. 
        </div>
    </body>
</html>

1 个答案:

答案 0 :(得分:1)

FileLocator.toFileURL需要FileLocator.find返回的格式的网址。正常用法是:

Bundle bundle = Platform.getBundle("plugin id");

URL url = FileLocator.find(bundle, new Path("plugin relative path"), null);

URL fileURL = FileLocator.toFileURL(url);

使用FileLocator.find非常重要,因为特殊URL用于插件Jar文件中的资源。

如果您需要访问文件夹中的其他文件,那么您应该为插件使用“功能”项目,并指定在插件安装期间解压缩插件,以便为文件创建普通文件夹。或者使用'Eclipse-BundleShape' - 有关详细信息,请参阅here

相关问题