Перейти к содержимому

Установщик Windows для Java-приложения, от jpackage до Setup.exe

Соберите JAR вместе со средой выполнения Java в папку с нативным .exe с помощью jpackage, а затем упакуйте эту папку в установщик Windows без WiX Toolset.

Обновлено 31 октября 2026 г. · 3 мин чтения

«Сначала установите Java» — не то, что хочется говорить клиентам. Начиная с JDK 14 jpackage решает половину задачи: он собирает приложение вместе с урезанной средой выполнения Java и даёт ему нативный MyApp.exe. Вторая половина, установщик Windows, — это то место, где jpackage требует установить WiX Toolset и разобраться в его особенностях. В этом руководстве папка, которую создаёт jpackage, превращается в Setup.exe без всего этого.

Шаг 1: соберите образ приложения

Положите исполняемый JAR и JAR-файлы зависимостей в одну папку (ниже это lib/) и запустите jpackage в Windows:

jpackage --type app-image --name MyApp --input lib --main-jar myapp.jar --main-class com.example.Main --icon app.ico --app-version 2.4.0

Команда создаёт папку MyApp/, в которой находятся:

  • MyApp.exe — нативный лаунчер с вашей иконкой;
  • app/ — ваши JAR-файлы и файл конфигурации;
  • runtime/ — среда выполнения Java только с теми модулями, которые нужны приложению.

Для приложения на JavaFX добавьте --module-path с путём к папке lib из JavaFX SDK и --add-modules javafx.controls,javafx.fxml (подставьте модули, которые используете). Для модульного приложения используйте --module вместо --main-jar.

Запустите MyApp\MyApp.exe и убедитесь, что приложение стартует без установленной в системе Java. Это обеспечивает папка runtime/.

Чтобы получить образ для Windows, jpackage должен работать в Windows. Подойдут компьютер с Windows, виртуальная машина или Windows-раннер в CI; варианты описаны в статье сборка на Mac.

Шаг 2: заархивируйте образ

Упакуйте в zip содержимое MyApp/: MyApp.exe, app/ и runtime/. Сохраните структуру: лаунчер ожидает, что app/ и runtime/ лежат рядом с ним.

Шаг 3: соберите установщик

  1. Загрузите zip в ExeTup. Он выберет MyApp.exe в качестве основной программы.
  2. Укажите название, ту же версию, что передали в --app-version, и имя издателя.
  3. Выберите для всех пользователей (Program Files, запрос прав администратора) или для текущего пользователя (без запроса). Корпоративные Java-приложения, которые раздают сотрудникам, часто ставят для пользователя; потребительские — обычно для всей машины.
  4. Оставьте 64-бит; jpackage собирает под архитектуру JDK, а это x64 почти на любой машине.
  5. Загрузите app.ico, включите ярлыки и запустите сборку.

В результате вы получаете установщик Windows, который размещает образ приложения, добавляет пункт в меню «Пуск» и деинсталлятор. Клиенты никогда не видят Java.

Почему бы не доверить установщик самому jpackage?

jpackage --type exe или --type msi действительно создаёт установщик, и некоторым командам этого достаточно. Но ему нужен установленный WiX Toolset 3 в PATH, он предлагает фиксированный мастер с ограниченными настройками, а поведение его деинсталлятора и ярлыков имеет шероховатости, которые трудно исправить, не погружаясь в WiX. Использование app-image и отдельного установщика разделяет две задачи: jpackage занимается упаковкой среды выполнения, в чём он хорош, а установщик — интеграцией с Windows.

Особенности Java

  • Размер среды выполнения. Урезанная среда занимает от 40 до 80 МБ. Отсечение модулей в духе jlink выполняется автоматически; --jlink-options --strip-debug и --jlink-options --no-man-pages урезают ещё немного.
  • Параметры Java. Передавайте флаги JVM через --java-options "-Xmx1g" при сборке образа; они записываются в конфигурацию лаунчера.
  • Обновления. Выпускайте новый установщик с более высокой версией. Установка поверх предыдущей версии заменяет app/ и runtime/ на месте.
  • Launch4j и подобные инструменты оборачивают JAR в .exe, но по умолчанию не включают среду выполнения, поэтому шаг «установите Java» никуда не исчезает. jpackage его убирает.
  • Подпись. Подпишите MyApp.exe перед архивированием, а скачанный Setup.exe — после; см. руководство по SmartScreen.

Частые вопросы

Нужна ли клиентам установленная Java?

Нет. Папка runtime/, которую создаёт jpackage, содержит всё необходимое приложению, и установщик поставляет её вместе с приложением.

Можно ли установить приложение без WiX Toolset?

Да. WiX нужен только для собственных типов jpackage exe и msi. Вместо них соберите app-image и используйте ExeTup для установщика.

Работает ли это с JavaFX?

Да. Включите модули JavaFX при сборке образа, проверьте MyApp.exe, а затем упакуйте папку, как описано выше.

Можно ли включить другой JDK, например Temurin?

jpackage берёт для среды выполнения тот JDK, из которого запущен. Запустите его из JDK, который хотите поставлять, или передайте --runtime-image со средой выполнения, собранной с помощью jlink.

Похожие руководства