Включить аргументы времени выполнения в исполняемый файл jar gradle

После долгих поисков я нашел, как включить аргументы времени выполнения в файл build.gradle для запуска исполняемого файла jar из gradle и даже как включить Аргументы JVM, мне не удалось найти ответ на этот вопрос:

У меня есть приложение "myapp.jar", которое принимает аргумент "--demo-mode". Я использую плагины distTar и distZip приложения gradle, чтобы превратить это в исполняемый файл jar с собственным скриптом (чтобы я мог запускать его напрямую как «./myapp.jar»).

Мне нужно добавить этот jar-файл в /etc/init.d, что я и сделал, просто создав символическую ссылку на файл jar в каталоге init.d (и запустив update-rc.d).

Теперь приложение работает нормально без аргумента --demo-mode, когда я загружаю систему, как я и хочу (то есть, когда не используется демонстрационный режим).

Я также могу зайти в домашний каталог владельца приложения, установить RUN_ARGS="--demo-mode" и запустить "./myapp.jar", и оно запустится в демонстрационном режиме. Прохладный. (заглянув внутрь jar-файла в сценарии сборки по умолчанию, сгенерированном gradle, видно, что $RUN_ARGS включен после имени файла jar в команду, которая фактически выполняет jar)

Чего я не могу сделать, так это заставить /etc/init.d запустить файл jar используя встроенный сценарий запуска Gradle и с примененным аргументом --demo-mode.

Я знаю, что могу написать свой собственный сценарий запуска для /etc/init.d и включить аргумент "вручную" (что-то вроде "su - user -c "java -jar /home/user/myapp.jar --demo-mode" )

Я также мог бы разобрать файл jar и вручную взломать сценарий запуска...

Я даже пытался экспортировать RUN_ARGS в .bashrc владельца jar, надеясь, что он будет подхвачен при запуске скрипта... (без радости)

Но есть ли способ настроить Gradle (или использовать какой-либо другой метод), чтобы включенный сценарий запуска также включал аргументы командной строки, которые я хочу передать в свою банку?


person Mark Underwood    schedule 12.08.2016    source источник
comment
Какую версию Gradle вы используете, или это имеет значение?   -  person Michael Easter    schedule 13.08.2016
comment
версия 2.14, и я понятия не имею, имеет ли это значение :)   -  person Mark Underwood    schedule 15.08.2016


Ответы (1)


На самом деле задачи плагина приложения, installDist, distZip или distTar, будут создавать сценарии запуска, {архив установки или дистрибутива}/bin/.

Это специфичные для ОС сценарии оболочки, которые, наконец, запускают приложение. Вы можете добавить свои аргументы.

...
exec "\$JAVACMD" "\${JVM_OPTS[@]}" -classpath "\$CLASSPATH" ${mainClassName} "\$@"

Обратите внимание, что скрипт передаст все свои аргументы базовому ${mainClassName}.

person RocWay    schedule 12.10.2016