Я создаю простой плагин Eclipse из существующего проекта приложения Java, который передает 2 внешних файла, один x-исполняемый / приложение и один. Сценарий.
Вызов реализован в таком приложении (которое не работает в плагине):
Process p = new ProcessBuilder("external/application_name", "-d", path).start();
Я использовал External Tool Configuration , чтобы определить, как я хочу запускать эти внешние файлы (когда пользователь нажимает кнопку в представлении), и я экспортировал конфигурацию (пример одного):
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.ui.externaltools.ProgramLaunchConfigurationType">
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/softwareevolution/external/application_name}"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="-d ${project_loc}"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${project_loc}"/>
</launchConfiguration>
- Как мне установить это приложение вместе с плагином Eclipse,
или как часть этого? (см. ответ на @howlger) - Я установил плагин для установки в качестве директории /
Подключен плагин к Feature Project - проверено распаковывать после
Инсталляция - и экспортируемый Художественный проект . Выберите приложение
папка на Сборка / Двоичная сборка .
- Могу ли я использовать эти экспортированные .launch файлы, и если да, то
под какой точкой расширения я должен включить их в plugin.xml? -
№ (см. @ Greg-449)
Приложение должно выдавать 2 файлов по пути, по которому оно
выполнен из. Мне отказано в разрешении при попытке
запускать его в терминале из каталога установки плагина, но не тогда, когда
запуск в рабочей области. (см. @howlger answer billow) - После экспорта плагина начальная
разрешения приложения изменились. Используемые инструкции в p2.inf
вернуть их обратно.
недавно сгенерированные файлы (из запущенного сценария .sh) отсутствуют права на запись .
ProcessBuilder
После окончательной настройки плагина и добавления ProcessBuilder я получаю сообщение об исключении: не удается запустить программу "rfind_20" (в
каталог
"Главная / adminuser / .p2 / бассейн / плагины / rFindTest3_1.0.0.201809030453 / внешний"
ошибка = 2: нет такого файла или каталога
Файл rfind_20 существовал, и разрешение было 777. Целевой проект также существовал.
Несмотря на то, что для рабочего каталога была установлена папка приложений, имени приложения было недостаточно, требовался абсолютный путь, так как
команда аргумент.
pb = new ProcessBuilder(url.getPath(), "-d", project.getProject().getLocation().toString());
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
IProject project= sampleGetSelectedProject();
ProcessBuilder pb;
Process rfind, ajust, copy;
Bundle bundle = FrameworkUtil.getBundle(getClass());//Bundle bundle = Platform.getBundle("rFindTest3");
URL url = FileLocator.find(bundle, new Path("external/rfind_20"), null);
URL dirurl = FileLocator.find(bundle, new Path("external/"), null);
IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
try {
MessageDialog.openInformation(
window.getShell(),
"Test",
project.getProject().getLocation().toString());
url = FileLocator.toFileURL(url);
dirurl = FileLocator.toFileURL(dirurl);
pb = new ProcessBuilder(url.getPath(), "-d", project.getProject().getLocation().toString());
//no matter the working directory the absolute path was required!! sending "rfind_20" as command did not work as command
pb.directory(new File(dirurl.getFile()));
rfind = pb.start();
rfind.waitFor();
rfind.destroy();
}catch(Exception e) {
MessageDialog.openInformation(
window.getShell(),
"Test",
e.getMessage());
}
return null;
}
Единственная загадка, почему мой метод sampleGetProject () не будет работать в перспективе подключаемого модуля. Так что просто помните, чтобы переключиться на другие перспективы при тестировании вашего плагина .