Я нашел, что много программ Java в Windows использует .bat пакетный файл в качестве средства запуска программы. Выглядит странным, если по сравнению с другими программами, которые используют .exe исполняемый файл.
Почему те программы Java не могут использовать .exe файл? Это - ограничение программы Java?
Спасибо.
Довольно просто создать .bat-файл и включить в него java -jar
, и он будет запущен. Вы можете легко отредактировать .bat-файл и настроить его еще больше. Все, что вам нужно, это блокнот.
Также он очень похож на файлы сценариев bash, например, для Linux. Это делает .bat-файл для выполнения программы в .jar легко переносимым с Win на Linux.
Хотя файл .exe не так легко модифицировать (если вообще возможно) и он создает некоторые мета-данные, результирующий .exe больше... EXE также является специфическим для Windows расширением файла...
Конечно, если вы хотите упаковать все в один файл, чтобы пользователь не беспокоился об удалении .jar-файла, но при этом имел bat-файл... это другой случай.
Добро пожаловать в мир сценариев оболочки DOS. Вы можете сделать исполняемый файл jar-файла, но если у вас есть только файлы классов java, лучшее, что вы можете сделать, это набрать небольшой скрипт для запуска вашей java-программы.
Вы можете, инструмент разработки для установки на нескольких платформах может создать его за вас. Например, 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.
. Пакетный файл часто выполняет "java -jar" и дополнительно добавляет параметры JVM - это не может быть добавлено в файл jar.
записывать bat-файл быстрее, чем переносить java-архив в exe-файл - эти инструменты часто являются коммерческими или плохо работают ...
также не так много родных исполняемых файлов Windows (.exe), выполненных на java (однако это все еще возможно - вьюз, липкая проволока и т. д.)
Java не компилируется в .exe
. Он компилируется в виртуальную машину JVM. Это фундаментальный аспект технологии платформы Java.
.bat
по сути является сценарием оболочки для Windows. Он выполняет .exe
, например java.exe
из JRE, которая затем запускает скомпилированный с байт-кодом код Java.
На самом деле, довольно много Java-приложений действительно используют нативные программы запуска вместо пакетных скриптов: Eclipse, NetBeans, IntelliJ IDEA, JRuby и Vuze - вот лишь несколько примеров.
Основная причина, по которой люди не делают этого чаще, заключается в том, что встраивание JVM в C на самом деле несколько сложно, и если вы можете обойтись запуском из пакетного скрипта, то зачем беспокоиться?
.Программы Java были разработаны с нуля для запуска не операционной системой, а виртуальной машиной. Когда вы «запускаете java-программу», вы фактически запускаете виртуальную машину и говорите ей загрузить вашу программу.
Так оно и было задумано. Дело не в том, что они бездельничали в отделе качества (в одном из ответов говорилось, что Sun доводит продукт только до 80%), это было осознанное решение. И поскольку чрезвычайно тривиально создать командный файл, ярлык, сценарий оболочки или исполняемый файл, который будет предоставлять средство запуска одним щелчком, не было необходимости добавлять возможность преобразования программы Java в файл .exe с одним щелчком мыши (в корпус окон).
Хороший вопрос. Я также задавался вопросом, почему Sun никогда не предоставляла какой-либо инструмент, который генерирует .exe.
EXE-файл намного удобнее, чем bat-файл. Он имеет красивую иконку etcetara.
Я однажды написал кое-что сам: http://www.bitstorm.org/jarx/
Пакетный файл может загрузить JVM с необходимым путем к классам и т. Д. И указать ему запустить jar, или класс, или класс в jar. Создание исполняемого образа PE просто для того, чтобы выполнить одну или две команды для запуска JVM и сказать ему открыть jar - это излишнее и трудоемкое занятие.
Что ж ... вы должны использовать командный файл, если хотите, например, выполнить файл .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.
Вы можете использовать autoit, чтобы очень быстро создать exe-файл с настраиваемым значком, который выглядел бы более профессионально, чем просто файл .bat.
Мои две причины:
java -jar something.jar
, если вы каким-то образом не настроите установщик для принятия java
как программа, существующая на целевой машине. Это может быть сложно или невозможно, в то время как создать ярлык для BAT-файла, включенного в дистрибутив, очень просто.