Есть приложение Javafx, запускается там, разумеется, где есть jre. Можно ли как сделать, чтобы jar файл запускался на компьютерах без установленного JRE? Может быть как-то внедрить внутрь?
Если вы работаете в IntellijIDEA, можете воспользоваться встроенным механизмом генерации автономных файлов
File -> Project Structure -> Project Settinfs -> Artifacts -> +
->javaFX Application -> From module 'Your Module Name'
Справа во вкладке JavaFX
задайте:
Application Class:
ваш класс с точкой входа - методом main
Native Bondle:
All
Проверьте, что Output directory
задана правильно (по умолчанию в папку out\artifacts
вашего проекта)
Build -> Build Artifacts -> 'Ваш артифакт' -> Build
В out/artifacts/
появится директория с исполняемым файлом ваш артефакт.exe
и необходимой средой исполнения.
Скопировав папку на дугой компьютер вы можете запустить проект без установленной JRE, т.к. все что нужно находится в одной папке с исполняемым файлом.
Это возможно.
Есть специальные программы, которые компилируют ваш код заранее (AOT компиляция) и оборачивают его в исполняемый файл вашей ос, который вдобавок содержит портативную JRE.
Знаю одну такую, называется Excelsior JET, правда не юзал её с приложениями javafx, но со стандартной библиотекой и swing работает нормально.
Часто используемый способ - это скачать launch4j, натравить его на свой jar-файл и получить исполняемый файл. По сути это самораспаковывающийся архив с запускалкой, JRE и оригинальным файлом внутри, но пользователю это не видно.
Более правильный способ - это использовать jlink:
Структура каталогов простейшего проекта
src
└───com.example
│ module-info.java
│
└───com
└───example
App.java
module-info.java
module com.example { }
App.java
package com.example;
public class App {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
Команды сборки
javac -d build\mods\com.example src\com.example\module-info.java src\com.example\com\example\App.java
jar --create --file=build\libs\com.example.jar --main-class=com.example.App -C build\mods\com.example .
jlink --module-path build\mods --add-modules com.example --output build\app\example --launcher start=com.example/com.example.App --compress=2 --no-header-files --no-man-pages --strip-debug
В результате в каталоге build\app появится каталог приложения example, который содержит в себе JRE и и саму программу в готовом для распространения виде. Запуск осуществляется с помощью батника - example\bin\start.bat
Естественно, лучше не набирать команды руками, а поручить это сборщику - Maven или Gradle.
1) Создаете новую папку и забрасываете туда jre
и jar
файлы:
2) Настраиваете Launch4J в Basic
разделе важные поля Output file
и jar
таким образом:
3) В разделе JRE
указываете jre
, который в папке:
4) И указываете в Build Wrapper
название конфигурационным файлам (после билда можно удалить в случае необходимости):
5) Важный момент: чтобы в результате запустить на любом пк exe
файл, он должен находится в одной папке с jre
файлом:
Для удобства распространения можно заархивировать jre
и exe
.
P.s. это конечно не лучшее решение, но также может быть полезным.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть MainActivity и есть menu_list в android studio, надо, что бы в MainActivity по нажатию на кнопку прогружался контент из menu_list в MainActivityПомогите пожалуйста
Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском
Имеется база из которой с помощью запросов достаются данные в формате jsonПервый запрос возвращает массив объектов, в котором есть поле с внешним...