Я использую Spring Boot 2 в своем проекте Gradle, чтобы сделать сборку для jar в Jenkins, и я хотел бы изменить имя этого файла jar.
По умолчанию Spring Boot 2 использует свойство Gradle rootProject.name, которое можно установить в файле /settings.gradle.
Однако я хотел бы изменить имя файла jar, не меняя rootProject.name.
Вот мои разделы bootJar и springBoot файла build.gradle:
bootJar {
launchScript()
}
.
springBoot {
buildInfo {
properties {
artifact = "jarName"
group = "groupName"
name = "projectName"
version = "1.0"
}
}
}
Примечание:artifact не устанавливает имя баночки, как я ожидал, после прочтения: https://docs.spring.io/spring-boot/docs/current/gradle-plugin/reference/html/#integrating-with-actuator
@AndyWilkinson: Спасибо! Удаление springBoot.buildInfo.properties.artifact и добавление bootJar.baseName сработало!




Поскольку задачи bootJar расширяют Jar, вы можете использовать archiveName для непосредственной установки имени:
bootJar {
archiveName = 'whatever'
}
Посмотрите здесь.
Спасибо. Я пробовал это, а также jar{baseName 'whatever'}, и ни один из них не работал. (Я думаю, что они работали только в SpringBoot 1.)
Это почти правильно. Однако настраиваемая задача должна быть bootJar, а не jar. Я соответствующим образом отредактировал ответ.
Спасибо @AndyWilkinson за ответ!
bootJar {
baseName "jarName"
launchScript()
}
.
springBoot {
buildInfo {
properties {
group = "groupName"
name = "projectName"
version = "1.0"
}
}
}
Моей целью было удалить версию из имени архива. Я сделал это так:
bootJar {
archiveName = "$baseName.$extension"
}
Теперь Gradle генерирует «project-name.jar» вместо «project-name-1.0-SNAPSHOT.jar». Это общее решение, которое не требует жесткого кодирования какого-либо конкретного имени архива.
Свойство archiveName по какой-то причине устарело, но я нашел более простой подход: bootJar { archiveVersion = null }. Это отменяет значение по умолчанию для свойства archiveVersion, которое по умолчанию равно project.version. В этом случае задача Jar генерирует окончательный archiveFileName без версии.
archiveFileName - это новая горячность. Все остальное устарело.
bootJar {
archiveFileName = "${archiveBaseName.get()}.${archiveExtension.get()}"
}
или эквивалент Kotlin DSL:
tasks.getByName<org.springframework.boot.gradle.tasks.bundling.BootJar>("bootJar") {
this.archiveFileName.set("${archiveBaseName.get()}.${archiveExtension.get()}")
}
Видеть:
Я искал секретный соус для манипулирования шаблоном. Поскольку я не опытный обработчик градиентов, я забыл, что вам нужно указать значения get(). Это ответ для тех, кто хочет иметь ПОЛНЫЙ контроль над именем сборки.
Для Gradle 6
bootJar {
archiveBaseName = 'freeway-server'
archiveVersion = '1.0.0'
archiveFileName = 'freeway-server.jar'
}
Забывать:-
System.out.print(bootJar.getArchiveBaseName().get())
System.out.print(bootJar.getArchiveVersion().get())
System.out.print(bootJar.getArchiveFileName().get())
Вы также можете использовать:
tasks.bootJar {
archiveFileName.set("app.jar")
}
Или с помощью jar-плагина
tasks.jar {
archiveFileName.set("app.jar")
}
Большинство людей просто хотят не указывать версию в названии банки, а не менять название полностью.
tasks.withType<org.springframework.boot.gradle.tasks.bundling.BootJar> {
archiveVersion.set("")
}
будет делать это с помощью Kotlin DSL. Окончательное название дается tasks.bootJar.get().archiveFileName.get().
У меня работал
project(':org.awseome.subproject') {
jar() {
archiveFileName = 'nameOfJar.jar'
}
}
внутри основного build.gradle. Использовал
Gradle 6.X Весенняя загрузка 2.X
Свойство информации о сборке
artifactпо умолчанию является производным от базового имени задачиbootJarилиbootWar, а не наоборот. Если вы настроите его явно, базовое имя по умолчанию больше не будет использоваться, а вместо него будет использоваться явное значение. Базовое имя задачиbootJarилиbootWarне изменится.