#java #exe
#java #exe
Вопрос:
Вот пример, показывающий, что я имею в виду: http://www.minecraft.net/download.jsp Если вы откроете Minecraft.exe с помощью winrar вы можете видеть манифест jar и классы, и вы можете фактически запустить jar следующим образом java -jar Minecraft.exe
Но когда я попытался встроить свой jar в свой собственный exe в качестве ресурса (я могу видеть классы так же, как в minecraft.exe с помощью winrar) и запустите его с помощью java -jar, он завершается ошибкой с сообщением
invalid or corrupt jar file
Как я могу правильно встроить jar в exe? таким образом, его можно запустить так же, как minecraft.exe ?
Комментарии:
1. Если вы можете открыть exe-файл с помощью winrar, то на самом деле это не exe-файл. Что в манифесте? Есть ли там основной класс?
2. @Nick Есть основной класс и манифест, но я не знаю, как minecraft упаковывает классы в exe, чтобы java могла использовать этот exe как jar. Вы даже можете добавить, что minecraft.exe в classpath, и java может видеть классы.
3. @sidd: насколько я помню,
.exe
формат требует некоторых байтов подписи в начале и допускает «случайное дерьмо» в конце. Формат ZIP (на котором основан jar) требует некоторых байтов подписи ближе к концу и допускает «случайный мусор» перед его содержимым. Сочетание этих двух означает, что у вас есть файл, который является как допустимым .exe, так и действительным .zip/.jar .4. Вы имеете в виду, что в манифесте указан основной класс? Вот как работает команда java -jar ( bit.ly/9uNJgs ).
5. @Joachim это интересный трюк, но как байты префикса приведут к запуску JVM?
Ответ №1:
Используйте JSmooth. Мы используем его с большим успехом
Ответ №2:
Существует инструмент под названием Jar2Exe. Однако я не знаю, тот ли это инструмент, который использует Minecraft.
Ответ №3:
Launch4j — еще один инструмент, который поддерживает это (с довольно большим количеством дополнительных функций, таких как автоматическая загрузка JRE при необходимости).