Почему в Eclipse используется встроенная программа запуска? - PullRequest
18 голосов
/ 26 января 2009

Eclipse IDE - один из лучших примеров огромного настольного приложения, написанного на Java.

Большинство приложений Java, которые я видел, обычно используют пакетный или командный скрипт для создания строки с путем к классу приложения и запуска JVM с путем к классу в качестве переменной env.

Затмение, с другой стороны, опирается на родную программу запуска. Это почему ? Что этот лаунчер делает, а скрипты - нет?

Я помню, как читал около полутора лет назад статью, в которой объяснялось, что "нам лучше с родной программой запуска", но id не объяснял внутреннюю работу программы запуска.

Ответы [ 3 ]

23 голосов
/ 26 января 2009

Модуль запуска Equinox использует JNI для запуска виртуальной машины Java в том же процессе, что и модуль запуска. Использование JNI также позволяет нам использовать виджеты SWT на заставке.


На самом деле, у вас все еще может быть сценарий, поскольку исполняемый модуль запуска eclipse.exe был разбит на 2 части с момента 3.3M5:

  • исполняемый файл и
  • общая библиотека (например, eclipse_1006.dll).

Исполняемый файл находится в корне установки eclipse.
Общая библиотека находится во фрагменте, специфичном для платформы, org.eclise.equinox.launcher.[config], в каталоге плагинов.

Перемещение большей части кода запуска в общую библиотеку, которая находится во фрагменте, означает, что эта часть кода запуска теперь может быть обновлена ​​с сайта обновления. Кроме того, при запуске из Java общая библиотека может быть загружена через JNI для отображения заставки.

Как объяснено здесь, вы можете запустить Eclipse 3.3 без встроенного средства запуска ,

java -jar plugins/org.eclipse.equinox.launcher_1.0.0.v20070319.jar

Обратите внимание, что имя jar-файла теперь зависит от версии, поэтому наивные скрипты, которые вызывают jar-файл с использованием точного имени файла, ломаются после обновления jar-файла.

Вместо этого вы можете искать файл, соответствующий org.eclipse.equinox_*.jar. К счастью, Eclipse-wiki содержит соответствующих шаблонов сценариев , которые полезны в этом случае.
Если вы хотите избежать изменения существующих сценариев, вы также можете выполнить поиск подключаемого модуля Equinox Launcher, скопировать его в главный каталог Eclipse и переименовать копию в startup.jar.

10 голосов
/ 26 января 2009

Некоторые из них относятся к конкретным окнам, некоторые являются общими.

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

  2. Нет необходимости запускать дополнительный процесс для выполнения сценария (это может иметь большое значение, если вы сами создаете сценарий IDE в рамках цикла сборки / тестирования / развертывания.

  3. Исполняемые заголовки обычно определяют «битность» вашей программы. Таким образом, исполняемый файл может явно указывать, что он разрешает / запрещает 32- или 64-разрядное выполнение.

  4. Исполняемые файлы на окнах могут быть криптографически подписаны.

  5. Многие программы защиты от вредоносных программ / брандмауэров поддерживают каждый выполнимый белый список. Таким образом, гораздо приятнее, когда запускается eclipse (и он проверяет себя на наличие обновлений в Интернете), когда впервые появляется всплывающее окно «Eclipse пытается получить доступ к Интернету», а не общий файл javaw.exe. пытаясь получить доступ в интернет ". Это также позволяет пользователю более детально контролировать это поведение.

  6. Процесс будет отображаться в менеджере задач / задач как "you_app_name", а не java -jar "ваш файл jar". Это облегчает отслеживание / управление ошибочными процессами. Что-то не редкость в настройках разработки.

5 голосов
/ 26 января 2009

Другие ответы носили исключительно технический характер, но, на мой взгляд, я думаю, что по гораздо более простым причинам: пользовательский опыт.

Конечный пользователь не должен возиться с чем-либо, чтобы заставить его работать. (Да, вы МОЖЕТЕ возиться с этим, если вы хотите использовать другую виртуальную машину или передать аргументы в виртуальную машину и т. Д., Но вы этого НЕ ДОЛЖНЫ).

Нет ничего более раздражающего для пользователя, чем установить программу, затем попытаться запустить ее, только для того, чтобы получить окно с надписью «введите путь к вашей Java vm», или, что еще хуже, вы дважды щелкните по нему, и ничего не происходит потому что вам нужно отредактировать командный файл, чтобы он работал.

Это 2009, а не 1996. Ни один пользователь (даже разработчик!) Не должен редактировать командные файлы, чтобы программа запускалась в первый раз.

...