Spring Boot 2 - изменить имя Jar

Я использую 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/#integration-with-actator


person Brandon Dudek    schedule 02.11.2018    source источник
comment
Свойство информации о сборке artifact по умолчанию является производным от базового имени задачи bootJar или bootWar, а не наоборот. Если вы настроите его явно, базовое имя по умолчанию больше не будет использоваться, а вместо него будет использоваться явное значение. Базовое имя задачи bootJar или bootWar не изменится.   -  person Andy Wilkinson    schedule 02.11.2018
comment
@AndyWilkinson: Спасибо! Удаление springBoot.buildInfo.properties.artifact и добавление bootJar.baseName сработало!   -  person Brandon Dudek    schedule 02.11.2018


Ответы (8)


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()}")
}

Видеть:

person Planky    schedule 07.06.2019
comment
Я искал секретный соус для манипулирования шаблоном. Поскольку я не опытный обработчик градиентов, я забыл, что вам нужно get() значения. Это ответ для тех, кто хочет иметь ПОЛНЫЙ контроль над именем сборки. - person hanzo2001; 25.01.2021

Поскольку _ 1_ задачи расширяет Jar вы можете использовать archiveName, чтобы задать имя напрямую:

bootJar {
   archiveName = 'whatever'
}

Взгляните на здесь.

person Opal    schedule 02.11.2018
comment
Спасибо. Я пробовал это, а также jar{baseName 'whatever'}, и ни один из них не работал. (Я думаю, что они работали только в SpringBoot 1.) - person Brandon Dudek; 02.11.2018
comment
Это почти правильно. Однако настраиваемая задача должна быть bootJar, а не jar. Я соответствующим образом отредактировал ответ. - person Andy Wilkinson; 02.11.2018

Спасибо @AndyWilkinson за ответ!

bootJar {
  baseName "jarName"
  launchScript()
}

.

springBoot {
  buildInfo {
    properties {
      group = "groupName"
      name = "projectName"
      version = "1.0"
    }
  }
}
person Brandon Dudek    schedule 02.11.2018

Для 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())
person Anik Mazumder    schedule 13.11.2019

Моей целью было удалить версию из имени архива. Я сделал это так:

bootJar {
   archiveName = "$baseName.$extension"
}

Теперь Gradle генерирует «project-name.jar» вместо «project-name-1.0-SNAPSHOT.jar». Это общее решение, которое не требует жесткого кодирования какого-либо конкретного имени архива.

person naXa    schedule 08.03.2019
comment
archiveName по какой-то причине устарело, но я нашел более простой подход: bootJar { archiveVersion = null }. Это отменяет значение по умолчанию archiveVersion, которое по умолчанию равно project.version. В этом случае задача Jar генерирует окончательный archiveFileName без версии. - person Ruslan Stelmachenko; 15.03.2019

Вы также можете использовать:

tasks.bootJar {
    archiveFileName.set("app.jar")
}

Или с помощью jar-плагина

tasks.jar {
    archiveFileName.set("app.jar")
}
person mrclrchtr    schedule 27.04.2020

Большинство людей просто хотят не указывать версию в названии банки, а не менять название полностью.

tasks.withType<org.springframework.boot.gradle.tasks.bundling.BootJar> {
    archiveVersion.set("")
}

будет делать это с помощью Kotlin DSL. Окончательное имя дано tasks.bootJar.get().archiveFileName.get().

person Abhijit Sarkar    schedule 25.09.2020

У меня работал

project(':org.awseome.subproject') {
 jar() {
     archiveFileName = 'nameOfJar.jar'
 }
}

внутри основного build.gradle. Использовал

Gradle 6.X Spring Boot 2.X

person Tristate    schedule 30.10.2020