Проблемы с поиском ресурсов по относительному пути в плагине

У моего плагина есть ресурс файла 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 не отображаются/разрешаются.

Это отлично работает, когда я запускаю «Приложение Eclipse» из IDE.

Ресурс файла 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>

person Amrit    schedule 14.04.2015    source источник


Ответы (1)


FileLocator.toFileURL ожидает URL в формате, возвращаемом 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, поскольку для ресурсов в JAR-файле подключаемого модуля используются специальные URL-адреса.

Если вам нужен доступ к другим файлам в папке, вы должны использовать проект «feature» для своих плагинов и указать, что плагин распаковывается во время установки плагина, чтобы для файлов создавалась обычная папка. Или используйте "Eclipse-BundleShape" - см. здесь для получения дополнительной информации.

person greg-449    schedule 14.04.2015
comment
Проблема не в том, чтобы найти ресурс, так как оба подхода работают - тот, который я использовал, и тот, который вы показали выше - фактическая проблема заключается в поиске ресурсов относительно ресурса плагина - так что здесь. В приведенном выше сценарии я могу найти .html, который является ресурсом, расположенным в файле jar плагина, но этот файл .html ссылается на css и изображения, как показано, которые также находятся в файле jar в той же папке ресурсов. Теперь, как html-файл, расположенный по приведенному выше коду, узнает о css и изображениях из той же папки. - person Amrit; 14.04.2015
comment
Добавил кое-что о распаковке плагина - person greg-449; 14.04.2015