Я написал приложение Java, и я создал исполняемый файл Jar, который успешно запускает мое приложение с помощью java -jar myJar.jar
. У меня есть исполняемый сценарий оболочки, называемый launchMyProgram
который завершает запуск этого Jar (и предлагает различные флаги, такие как --help и т.д.). Мой целевой файл вывода выглядит следующим образом:
$ ls /path/to/MyProject/target/
archive-tmp/ classes/ myJar.jar
Каков стандартный метод для меня, чтобы написать установщик для моего приложения только для Unix? Я предполагаю, что я был бы прав, чтобы удалить исполняемый файл launchMyProgram
в /usr/local/bin. Но где я могу поместить файл Jar? Должен ли я сделать свой собственный подкаталог где-то для файлов моей программы? Мне нужно скопировать каталог classes
из указанного выше вывода в тот же каталог, что и Jar? Это будет выполняться через Makefile, поэтому пользователи могут переопределить мои варианты.
В принципе, я хочу, чтобы пользователь мог запускать make && make install
и иметь возможность запускать мое приложение с помощью launchMyProgram
, и я хочу разместить файлы (одну банку, папку "классы" и сценарий оболочки) максимально типичные места возможно.
Один из лучших способов сделать это был повторно изобретен много раз, но, к сожалению, пока не является стандартным.
Поскольку JAR является ZIP файлом, которому разрешено иметь произвольный префикс, вы можете добавить сценарий оболочки запуска в свою банку, пометить его исполняемым и рассматривать как автономный двоичный файл.
$ echo '#!/bin/bash' > launchMyProgram
$ echo 'exec java -cp "${0}" com.example.program.Main "${@}"' >> launchMyProgram
$ cat myJar.jar >> launchMyProgram
$ chmod +x ./launchMyProgram
$ ./launchMyProgram
Hello, world!
См. " Простые и удобные исполняемые банки" для получения более подробной информации.
Вы должны иметь возможность упаковывать все в classes/
папку в свою банку и все еще работать.
Кроме того, если вы хотите предоставить RPM или DEB-пакеты или что-то для пользователей, fpm
делает это очень просто.