Почему программы Java используют файл .bat в качестве средства запуска программ? - PullRequest
8 голосов
/ 15 мая 2010

Я обнаружил, что многие программы Java в Windows используют пакетный файл .bat в качестве средства запуска программ. Это выглядит странно по сравнению с другими программами, которые используют исполняемый файл .exe.

Почему эти программы на Java не могут использовать файл .exe? Это ограничение программы на Java?

Спасибо.

Ответы [ 12 ]

12 голосов
/ 15 мая 2010

Довольно просто создать файл .bat и включить в него java -jar <archive-path>, и он будет запущен. Вы можете легко редактировать .bat файл и настраивать его. Все, что вам нужно, это блокнот.

Также это выглядит как файлы сценариев bash для Linux, например. Это делает файл .bat для выполнения программы в .jar легко переносимым из Win в Linux.

Хотя файл с расширением .exe трудно изменить (если он вообще существует) и он генерирует некоторые метаданные, в результате получается файл с расширением .exe ... EXE также имеет расширение, специфичное для Windows ...

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

9 голосов
/ 15 мая 2010

командный файл часто выполняет "java -jar" и дополнительно добавляет параметры JVM - его нельзя добавить в jar-файл.

записывать файл bat быстрее, чем оборачивать архив Java в exe-файл - эти инструменты часто бывают коммерческими или плохо работают ...

также, в Java не так много собственных исполняемых файлов Windows (.exe) (однако, это все еще возможно - vuze, limewire и т. Д.)

4 голосов
/ 15 мая 2010

Java не компилируется в .exe. Он компилируется в виртуальную машину, JVM. Это фундаментальный аспект технологии платформы Java.

.bat - это по сути сценарий оболочки для Windows. Он выполняет .exe, например, java.exe из JRE, который затем запускает скомпилированный байт-код Java-код.

2 голосов
/ 16 мая 2010

На самом деле, довольно много Java-приложений делают используют собственные программы запуска вместо пакетных сценариев: Eclipse , NetBeans , IntelliJ IDEA, JRuby и Vuze - это лишь несколько примеров.

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

0 голосов
/ 24 мая 2010

Мои две причины:

  1. Многие сборщики установщиков не позволяют создавать ярлыки меню программы, содержащие, например, java -jar whatever.jar, если только вы не настроите установщик так, чтобы он принимал java в качестве программы, существующей на целевом компьютере. Это может быть сложно или невозможно, хотя создание ярлыка для BAT-файла, включенного в дистрибутив, очень просто.
  2. Как заявили другие: необходимо добавить параметры запуска JVM в зависимости от конфигурации хост-машины.
0 голосов
/ 15 мая 2010

Java-программы с самого начала разрабатывались для запуска не ОС, а виртуальной машиной. Когда вы «запускаете Java-программу», вы фактически запускаете виртуальную машину и указываете ей загрузить вашу программу.

Вот как это было задумано. Дело не в том, что они ослабляли работу в отделе качества (в одном ответе говорилось, что Sun получает продукт только на 80%), это было сознательное решение. И поскольку создание пакетного файла, ярлыка, сценария оболочки или исполняемого файла, обеспечивающего запуск в один клик, крайне тривиально, нет необходимости добавлять возможность конвертировать Java-программу в файл с одним щелчком мыши. шкаф окон).

0 голосов
/ 15 мая 2010

Вы можете использовать autoit, чтобы очень быстро создать исполняемый файл с пользовательским значком, который выглядел бы более профессионально, чем просто .bat файл.

0 голосов
/ 15 мая 2010

Добро пожаловать в мир сценариев оболочки DOS. Вы можете сделать исполняемый файл JAR-файла, но если у вас есть только файлы классов Java, лучшее, что вы можете сделать, - это написать небольшой скрипт для запуска вашей Java-программы.

0 голосов
/ 15 мая 2010

Вы можете, многоплатформенный инструмент разработки установки может создать один для вас. Например, InstallAnywhere создаст исполняемый файл Windows для вашего Java-приложения.

Sun была компанией, которая следовала правилу 80/20, они заставляли работать самые важные вещи, но никогда не заставляли это работать хорошо. Например, сравните плагин Java для обнаружения браузера и установите Adobe Flash. Flash был быстрым и легким много лет назад, в то время как плагин Java часто перенаправлял вас на сайт Sun, и все.

Возвращаясь к исполняемому файлу, Java-модель пишется один раз, многие запускаются, когда Sun решит предоставить модуль запуска, они должны будут предоставить его для всех платформ. Например, Windows JDK потребовал бы предоставить средства запуска для Windows x86, ia64, amd64, linux / unix могут совместно использовать средство запуска, поскольку все они используют сценарии оболочки общего доступа. Тогда вопрос в том, показывает ли Sun упаковщик для Mac? Это просто не вписывается, вы должны обязательно взглянуть на инструменты, такие как installanywhere и install4j, все они включают в себя Java-пусковые установки.

0 голосов
/ 15 мая 2010

Ну ... вы должны использовать командный файл, если вы хотите, например, выполнить .class файл. Вы хотите использовать пакет, потому что вы должны передать URI вашей java-программы на виртуальную машину java (также программу), чтобы она могла ее выполнить.

Но вы можете собрать исполняемую Java-программу, также как и EXE (для ее запуска нужно просто дважды щелкнуть по ней). Его расширение - .JAR , и иногда вам нужно связать расширение .JAR с двоичной платформой Java (или аналогичной) для достижения этой цели. Затем до Windows нужно передать URI вашего java-приложения на виртуальную машину java, чтобы оно выполнялось.

Чтобы сделать это в NetBeans, выполните команду Build, и в папке вашего проекта найдите папку dist, и там вы увидите исполняемый файл Java.

Exe, или не exe, функциональность одинакова с точки зрения пользователя, поэтому он не измеряет ...

ПРИМЕЧАНИЕ

Java-программы не зависят от платформы, поэтому процесс выполнения на разных платформах может быть разным. Если бы Java была только для Windows, я уверен, что SUN сделает ее компиляцией в Windows EXE.

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