#java #shell #gradle #executable
#java #оболочка #gradle #исполняемый
Вопрос:
Я не большой поклонник создания исполняемых jar-файлов fat для программ Java, поскольку это сопряжено с огромными накладными расходами, когда у меня есть несколько исполняемых программ из одного проекта.
Я хочу иметь возможность создавать единый jar, подобный библиотеке, и создавать соответствующие скрипты .sh, которые в значительной степени имеют структуру:
java -cp classpath_libs main_class program_args…
или любой другой исполняемый файл, в котором я могу настроить его под свои нужды, но аналогичным образом (например: hadoop jar project_jar main_class classpath_libs program_args
). Возможно ли это в gradle? если да, то каким образом? Обратите внимание, мне нужно создать несколько сценариев, использующих разные основные классы из одного проекта.
Ключевое требование здесь — иметь возможность использовать окончательную полностью разрешенную строку classpath.
ОБНОВЛЕНИЕ: я видел примеры использования плагина application, но он создает исполняемый jar с упакованными в него зависимыми библиотеками. Это НЕ то, что я ищу.
Ответ №1:
Насколько я обнаружил, похоже, что нет плагина, который обрабатывает это напрямую. Итак, я использовал java-library
плагин, использовал configurations.runtime
значение classpath и создал необходимые скрипты и задачу копирования, чтобы скопировать необходимые библиотеки в нужные каталоги. Для тех, кто заинтересован, вы также можете попробовать distZip
опцию в application
плагине, где gradle создает сценарии для выполнения и упаковывает необходимые библиотеки в дистрибутив. Вы можете взглянуть на выходные данные скрипта, чтобы увидеть, как структурирован путь к классам, и создать нечто подобное.