У меня мультипроектная сборка и в один из подпроектов я поставил задачу собрать толстую банку. Я создал задачу, аналогичную описанной в кулинарной книге .
jar {
from configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
manifest { attributes 'Main-Class': 'com.benmccann.gradle.test.WebServer' }
}
Его запуск приводит к следующей ошибке:
Причина: вы не можете изменить конфигурацию, которая не находится в неразрешенном состоянии!
Я не уверен, что означает эта ошибка. Я также сообщил об этом в Gradle JIRA, если это ошибка .
def mainClassName
чтобы код заработал ... Я получал Не удалось установить неизвестное свойство mainClassName для корневого проектаimplementation
конфигурацию вместо устаревшейcompile
. Приведенный выше код создает мне небольшую банку без зависимостей. Когда я меняю его (from { configurations.implementation.collect {...} }
), возникает ошибка, в которой говорится, что разрешение конфигурации «реализация» напрямую не разрешеноconfigurations.compileClasspath
исправит все ошибкиimplementation
, но оставитapi
зависимости afik. Нашел здесь в другом ответе решениеruntimeClasspath
. Это также включает в себяapi
зависимости.Ответ @felix почти привел меня туда. У меня было две проблемы:
Следующая установка решает эту проблему
Чтобы добавить это в стандартную задачу сборки или сборки, добавьте:
Изменить: благодаря @mjaggard: в последних версиях Gradle измените
configurations.runtime
наconfigurations.runtimeClasspath
источник
artifacts
то, что я искал.gradle fatJar
кажется, что зависимости среды выполнения не компилируются, поэтому их нельзя скопировать.Если вы хотите, чтобы
jar
задача выполнялась нормально, а также имела дополнительнуюfatJar
задачу, используйте следующее:Важная часть
with jar
. Без него классы этого проекта не включены.источник
group "build"
и эта задача будет вbuild
группе (с другими задачами, то естьjar
задачей.with jar
ключевому слову, что именно оно делает?У меня это отлично работает.
Мой основной класс:
И это содержимое моего файла build.gradle:
И я пишу в консоли следующее:
И вывод отличный:
источник
Чтобы сгенерировать толстый JAR с основным исполняемым классом, избегая проблем с подписанными JAR, я предлагаю плагин gradle-one-jar . Простой плагин, использующий проект One-JAR .
Легко использовать:
источник
Простое решение
источник
Ответ от @ben почти работает для меня, за исключением того, что мои зависимости слишком велики, и я получил следующую ошибку
Чтобы решить эту проблему, мне нужно использовать следующий код
источник
Для тех, кому нужно собрать больше одной фляги из проекта.
Создайте функцию в gradle:
затем позвоните:
Работает на Gradle 5.
Баночка будет размещена по адресу
./build/libs
.источник
Я использую задачу
shadowJar
по плагину. com.github.jengelman.gradle.plugins:shadow:5.2.0
Использование просто запускается
./gradlew app::shadowJar
Файл результатов будет по адресуMyProject/app/build/libs/shadow.jar
build.gradle
файл верхнего уровня :build.gradle
файл уровня модуля приложенияисточник
Gradle 6.3, библиотека Java. Код из «jar task» добавляет зависимости к «build / libs / xyz.jar» при запуске задачи « gradle build ».
источник
Если вы привыкли к ant, вы можете попробовать то же самое и с Gradle:
источник