До сих пор я создавал исполняемые файлы JAR с помощью функции Eclipse «Export ...», но теперь я переключился на IntelliJ IDEA и Gradle для автоматизации сборки.
Некоторые статьи здесь предлагают плагин «application», но это не совсем приводит к ожидаемому результату (просто JAR, никаких стартовых скриптов или что-то в этом роде).
Как я могу добиться того же результата, который Eclipse делает с диалоговым окном «Экспорт ...»?
Ответы JB Nizet и Jorge_B верны.
В простейшей форме создание исполняемого JAR-файла с Gradle - это просто добавление соответствующих записей в манифест . Однако гораздо чаще встречаются зависимости, которые необходимо включить в путь к классам, что делает этот подход сложным на практике.
Плагин приложение обеспечивает альтернативный подход; вместо создания исполняемого JAR он обеспечивает:
run
задача легко облегчить запуск приложения непосредственно из сборкиinstallDist
задача , которая формирует структуру каталогов , включая встроенный JAR, все баночки , что это зависит от, и скрипт для запуска , который тянет все это вместе в программу вы можете запуститьdistZip
иdistTar
задачи, которые создают архивы, содержащие полный дистрибутив приложения (сценарии запуска и JAR)Третий подход заключается в создании так называемого «толстого JAR», который представляет собой исполняемый JAR, который включает в себя не только код вашего компонента, но и все его зависимости. Есть несколько различных плагинов, которые используют этот подход. Я включил ссылки на некоторые из них, которые я знаю; Я уверен, что есть еще.
источник
configurations.runtime
в пакет зависимости времени выполнения в одном банке..tar
/.zip
?Как уже отмечали другие, для того, чтобы файл jar был исполняемым, точка входа приложения должна быть установлена в
Main-Class
атрибуте файла манифеста. Если файлы классов зависимостей не размещены вместе, их необходимо установить вClass-Path
записи файла манифеста.Я перепробовал все виды комбинаций плагинов и что не для простой задачи создания исполняемого фляги и так или иначе, включая зависимости. Кажется, что всем плагинам так или иначе не хватает, но, наконец, я получил его так, как хотел. Никаких загадочных сценариев, не миллион разных мини-файлов, загрязняющих каталог сборки, довольно чистый файл сценариев сборки и, самое главное, ни один миллион файлов сторонних классов не слился в мой архив jar.
Ниже приводится копипаст из здесь для вашего удобства ..
[How-to] создайте дистрибутивный zip-файл с jar-файлами зависимостей в подкаталоге
/lib
и добавьте все зависимости кClass-Path
записи в файле манифеста:Хостинг как суть здесь .
Результат можно найти в
build/distributions
и разархивированное содержимое выглядит следующим образом:Содержание
MyJarFile.jar#META-INF/MANIFEST.mf
:источник
lib
каталоге созданного файла zip / tar, а скорее находился вlib
родительском каталоге, как предполагает этот ответ. Это решение, похоже, отлично сработало для меня."lib/$it.name"
в"$it.name"
будет делать эту работу.Наименьшим решением для меня было использовать плагин gradle-shadow-plugin
Помимо применения плагина все, что нужно сделать, это:
Сконфигурируйте задачу jar, чтобы поместить ваш главный класс в манифест
Запустите задание Gradle
Возьми app-version-all.jar из сборки / libs /
И, наконец, выполнить его через:
источник
build.gradle
пример .'com.my.app.MainKt'
. Без дополнительной информации я не смогу вам помочь.Вы пробовали задачу 'installApp'? Разве это не создает полный каталог с набором стартовых скриптов?
http://www.gradle.org/docs/current/userguide/application_plugin.html
источник
installApp
не создаетMETA-INF/MANIFEST.MF
файл. Я делаю что-то неправильно?installApp
задачу в списке задач Плагина приложения . Вы имели в видуinstallDist
вместо этого?installApp
был переименованinstallDist
в Gradle 3.0. Вот примечание к выпуску .Спасибо Константин, это сработало как шарм с несколькими нюансами. По какой-то причине указание основного класса как части манифеста jar не совсем работает, и вместо этого ему нужен атрибут mainClassName. Вот фрагмент из build.gradle, который включает в себя все, чтобы он работал:
После запуска gradle shadowJar вы получите myapp- {version} -all.jar в папке сборки, которую можно запустить как java -jar myapp- {version} -all.jar.
источник
Вы можете определить артефакт jar в настройках модуля (или структуре проекта).
Сделать банку так же просто, как нажать «Построить артефакт ...» в меню «Построить». В качестве бонуса вы можете упаковать все зависимости в одну банку.
Проверено на IntelliJ IDEA 14 Ultimate.
источник
Я проверил довольно много ссылок для решения, наконец-то сделал следующие шаги, чтобы оно заработало. Я использую Gradle 2.9.
Внесите следующие изменения в свой файл сборки, Gradle:
Упомянуть плагин:
Предоставьте Buildscript:
Предоставить основной класс:
Создать фиджар:
Запустите фаджар из / build / libs /:
источник
Вы можете использовать плагин SpringBoot:
Создать банку
А потом запусти
Примечание: ваш проект НЕ должен быть проектом SpringBoot, чтобы использовать этот плагин.
источник