Конференция "Прочее" » Возможно ли на Java делать standalone Windows-приложения?
 
  • Salah © (28.12.18 10:53) [0]
    То есть полноценные экзешники. И как? (если возможно)
  • 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. Хотя всякое может случиться...
  • java_guy © (01.02.19 13:27) [3]
    Alex Konshin ©   (14.01.19 03:30) [2]

    > Но, к сожалению, пулемёта я вам не дам.


    Зачем такие сложности? Экзешник из jar-а гораздо проще можно сделать
  • картман © (02.02.19 14:35) [4]

    > Alex Konshin ©   (14.01.19 03:30) [2]

    сбербанк?
 
Конференция "Прочее" » Возможно ли на Java делать standalone Windows-приложения?
Есть новые Нет новых   [118428   +11][b:0][p:0]