Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Возможно ли на Java делать standalone Windows-приложения?


Salah ©   (28.12.18 10:53

То есть полноценные экзешники. И как? (если возможно)


pavel_guzhanov ©   (28.12.18 12:01[1]

Что считаем полноценным экзешником? Если это файл с расширением.exe, и запускаемый в windows двойным кликом или по enter, то можно.
Вот пара ссылок:
https://howtodoinjava.com/maven/create-windows-exe-file-for-java-application/
https://habr.com/post/131164/


Alex Konshin ©   (14.01.19 03:30[2]

А я в конце концов написал своё :)

Мне нравилось, как Groovy запускает скрипты с анотацией @Grab, но я сильно не взлюбил сам груви. Ну не нравится мне, когда синтаксические ошибки не вылавливаются на этапе компиляции, уж очень дорого стоит поддерживать большие проекты на груви.

Потому я попытался это имитировать на Java. Написал маленький универсальный launcher на java который умеет доставать dependencies из maven repository и запускать приложение. И ещё написал крохотный exe (~20K) на C, который умеет запускать этот launcher. А также shell скрипт, который делает то же самое на Linux.

В деталях всё сложнее. В реальности реализован bootstrap в несколько стадий:
- exe или скрипт закачивает launcher jar из Maven repo (или находит его в локальном репо) и запускают его.
- launcher умеет только искать/загружать настоящий код который умеет работать с Maven repositories. Вот уже он на самом деле ищет и, если нужно, закачивает приложение и его зависимости. Реально классы (2 класса) в launcher jar для разных приложений совсем не отличаются (если не нужны какие-то оптимизации или нетривиальная логика), а разница только в *.properties файле, который кладётся в тот же jar при сборке. В пропертях указаны необходимые jar, а также класс и метод для запуска приложения.
- launcher добавляет все необходимые jar файлы в текуший classpath и запускает main class приложения. Т.е. исполнение приложения происходит в той же Java VM, как будто его запустили обычным образом.

Код умеет искать с нескольких типах локальных репо: Maven (.m2/repository), Groovy (.groovy/grapes), Gradle (.gradle/caches/modules-2/files-2.1), а также свой локальный кеш. В качестве удалёных репо у нас используются Artifactory, но, понятное дело, что будет работать с любым другим Maven repo.  

Работает с java8 и java11. Т.е. если компилировать с таргетом java8, то код работает под любой джавой 8+ (это на самом деле нетривиально из-за больших изменений в java 9-11).

В итоге у меня теперь есть технология создания приложений, которые запускаются как exe/shell и загружающие то, что им нужно из Maven repository. Всё строится, собирается и публикуется в Maven repo с помощью Gradle скрипта. CI сделана в GitLab.

Но, к сожалению, пулемёта я вам не дам. Этот код используется внутри компании и вряд ли когда-нибудь дойдут руки и позволят сделать его open source. Хотя всякое может случиться...


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо