#spring-boot #gradle #spring-boot-gradle-plugin
#весенняя загрузка #gradle #spring-boot-gradle-plugin
Вопрос:
Прямо сейчас у меня возникла эта проблема, когда мне нужно, чтобы мое приложение SpringBoot было превращено в исполняемый файл jar, но это должно быть сделано в задаче, а не просто в конфигурации в gradle.build.
Итак, приведенный ниже фрагмент в моем build.gradle
создаст исполняемый файл jar:
jar {
manifest {
attributes 'Main-Class': 'com.path.name.to.main.App'
}
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}
Все работает, но когда я создаю jar в качестве задачи, jar больше не становится исполняемым и выдает эту ошибку Ошибка: не удалось найти или загрузить основной класс com.path.name.to.main.App
:
task makeJar(type: Jar) {
archiveName = 'app.jar'
manifest {
attributes 'Main-Class': 'com.path.name.to.main.App'
}
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}
То, как моя компания выполняет развертывания, желательно создавать jar в задаче в build.gradle
, в отличие от конфигурации, упомянутой выше.
Однако я не совсем уверен, почему перенос его из jar
конфигурации в задачу повлияет на результат фактического jar, который был создан, и что мне нужно сделать, чтобы исправить это?
Ответ №1:
Прежде всего, jar
конфигурация, о которой вы говорите, на самом деле является task of type Jar
, она просто создается Gradle (скорее всего, его плагином Java). Ознакомьтесь с документацией по задачам, созданным плагинами, которые применяются к вашему сценарию сборки.
В качестве примера вы можете получить доступ к своей задаче makeJar
тем же способом, что и к задаче jar
после ее создания:
task makeJar(type: Jar)
makeJar {
// configuration things
}
То, как моя компания выполняет развертывания, желательно создавать jar в задаче в
build.gradle
, в отличие от конфигурации, упомянутой выше.
Знание того, что jar
это тоже задача, показывает, что эта политика развертывания вашей компании вообще не имеет смысла. Вы можете настроить и использовать задачу jar
так же, как задачу, созданную вручную.
Однако иногда имеет смысл создать файл JAR, содержащий только классы проекта и исполняемый файл JAR. Поскольку jar
задача уже создает первую, нам нужна другая задача для создания второй. Исполняемые JAR-файлы также называются fat или uber JAR, и на самом деле есть действительно хороший плагин для их создания.
Корень вашей реальной проблемы заключается в том, что задача jar
, поскольку она создается плагином Java, имеет некоторую конфигурацию, применяемую к ней автоматически, что ваша задача makeJar
отсутствует. С помощью строки from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
все зависимости вашего проекта внутри compile
конфигурации добавляются в JAR, но код в вашем собственном проекте отсутствует. Следующий код добавляет содержимое обычной jar
задачи:
task makeJar(type: Jar) {
archiveName = 'app.jar'
manifest {
attributes 'Main-Class': 'com.path.name.to.main.App'
}
with jar
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}