Почему программы Java используют .bat файл в качестве средства запуска программы?

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

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

Спасибо.

8
задан CMW 15 May 2010 в 15:07
поделиться

12 ответов

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

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

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

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

12
ответ дан 5 December 2019 в 07:34
поделиться

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

0
ответ дан 5 December 2019 в 07:34
поделиться

Вы можете, инструмент разработки для установки на нескольких платформах может создать его за вас. Например, 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.

-1
ответ дан 5 December 2019 в 07:34
поделиться

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

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

также не так много родных исполняемых файлов Windows (.exe), выполненных на java (однако это все еще возможно - вьюз, липкая проволока и т. д.)

9
ответ дан 5 December 2019 в 07:34
поделиться

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

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

4
ответ дан 5 December 2019 в 07:34
поделиться

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

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

.
2
ответ дан 5 December 2019 в 07:34
поделиться

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

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

0
ответ дан 5 December 2019 в 07:34
поделиться

Хороший вопрос. Я также задавался вопросом, почему Sun никогда не предоставляла какой-либо инструмент, который генерирует .exe.

EXE-файл намного удобнее, чем bat-файл. Он имеет красивую иконку etcetara.

Я однажды написал кое-что сам: http://www.bitstorm.org/jarx/

-1
ответ дан 5 December 2019 в 07:34
поделиться

Пакетный файл может загрузить JVM с необходимым путем к классам и т. Д. И указать ему запустить jar, или класс, или класс в jar. Создание исполняемого образа PE просто для того, чтобы выполнить одну или две команды для запуска JVM и сказать ему открыть jar - это излишнее и трудоемкое занятие.

0
ответ дан 5 December 2019 в 07:34
поделиться

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

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

Для этого в NetBeans выполните команду Build и в папке проекта найдите папку dist, и там вы увидите исполняемый файл java.

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

ПРИМЕЧАНИЕ

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

0
ответ дан 5 December 2019 в 07:34
поделиться

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

-3
ответ дан 5 December 2019 в 07:34
поделиться

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

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

Похожие вопросы: