Как ссылаться на файл из jar-файла в плагине eclipse - PullRequest
3 голосов
/ 11 апреля 2011

Я создал плагин Eclipse и хотел развернуть его во время выполнения Eclipse. У меня ниже структура пакета.

com.myplugin
  |
   ---resources
       |
        ---server.bat

В рамках задания плагина должен быть выполнен файл «server.bat».

Я упаковал плагин в виде файла .jar, включая папку resouces в двоичном файле, и поместил в папку eclipse "plugins".

Плагин вступил в силу, и он работает нормально, но у меня есть проблема при выполнении файла "server.bat", который находится внутри сгенерированного мной фляги. Сообщение об ошибке гласит:

"Windows не может найти" resources \ server.bat ", убедитесь, что вы ввели имя правильно и попробуйте снова "

Я пробовал с относительными и абсолютными путями, но это не сработало.

Вот код, выполняющий эту работу:

URL url = Activator.getDefault().getBundle().getEntry("/resources/server.bat");

String fileURL = FileLocator.toFileURL(url).toString();

String commandLine = "cmd.exe /c start " +fileURL;

Process process= Runtime.getRuntime().exec(commandLine);

Я получил вывод "fileURL":

Файл: / D: / Program Файлы / IBM / SDP / конфигурации / org.eclipse.osgi / пакеты / 2392/1 / .cp / ресурсы / server.bat

Я не уверен, что это правильно.

Надеюсь, это достаточно ясно, чтобы ответить на вопрос.

В качестве альтернативы, пожалуйста, предложите другой способ, например, создание функций для развертывания плагина со структурой папок. Я еще не пробовал эту опцию.

Ответы [ 5 ]

3 голосов
/ 14 апреля 2011

У меня была похожая проблема при экспорте моего плагина.Я должен был сослаться на exe-файл, хранящийся в моем файле jar плагина.Когда плагин был экспортирован, я не могу получить доступ к заархивированному файлу, в то время как он доступен, когда я разрабатываю плагин, потому что eclipse ищет файл в моей «папке разработки».Чтобы решить эту проблему, я создал функцию плагина и на вкладке «Включенные плагины» файла feature.xml установил флажок

Распаковать архив плагина после установки.

для плагина, который содержит исполняемый файл.Используя эту опцию, вы найдете ваши файлы плагинов в папке в папке плагинов eclipse, и вы сможете получить к ним доступ как к обычным файлам.

Например

    Bundle bundle = <get a bundle of your plugin>;
    URL url = FileLocator.find(bundle, new Path(<relative path from plugin root to your file>), null);
    try {
        url = FileLocator.resolve(url);
    } catch (IOException e) {
        e.printStackTrace();
        return false;
    }

В противном случае я думаю, что выдолжен распаковать вашу банку.

Надеюсь, что эта помощь.

РЕДАКТИРОВАТЬ

Как я уже сказал, вы можете создать проект объектов (для примера посмотрите здесь ) и при добавлении плагинов установите флажок «Распаковывать архив плагинов после установки».Eclipse сделает всю работу за вас, и вы найдете разархивированный плагин в папке плагинов eclipse.Это решило проблему для меня.

1 голос
/ 13 апреля 2011

Я заставил это работать, используя ProcessBuilder.Ниже приведен фрагмент кода ..

URL url = Platform.getBundle(Activator.PLUGIN_ID).getEntry("resources/server.bat");
String fileURL = FileLocator.toFileURL(url).toString();
ProcessBuilder pb = new ProcessBuilder("cmd.exe","/c",fileURL); 
pb.redirectErrorStream(true);
Process p = pb.start();
p.destroy();

Конечно, я извлек jar и поместил этот каталог в папку с плагинами eclipse.

1 голос
/ 12 апреля 2011

Ваш код выглядит нормально.Обратите внимание:

  1. Вам необходимо преобразовать fileURL в путь к файлу (то есть удалить префикс "file: /").Это сильно зависит от платформы - попробуйте положиться на org.eclipse.core.runtime.IPath и java.io.Path (не помню правильный код, извините)содержит пробел.
0 голосов
/ 28 мая 2013

Я обнаружил, что это работает хорошо с Eclipse RCP 4, этот код взял данное изображение GIF из файла JAR, который был в данном плагине

public ImageDescriptor getImgDesc(final String bundleId, final String fullPath)
 throws IOException {

  final URL url = new URL("platform:/plugin/" + bundleId + "/" + fullPath);

  final ImageDescriptor imgDesc = ImageDescriptor.createFromURL(url);
  return imgDesc;
}

....

final ImageDescriptor imgDesc  =  getImgDesc("com.awe.test","images/Applet24.gif");
final Image applet24 = imgDesc.createImage();
0 голосов
/ 13 августа 2012

Используйте второе решение http://www.vogella.com/blog/2010/07/06/reading-resources-from-plugin/

И не забудьте экспортировать файлы, к которым вы хотите получить доступ, в конфигурации сборки вашего плагина.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...