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/#integrating-with-actuator

Свойство информации о сборке artifact по умолчанию является производным от базового имени задачи bootJar или bootWar, а не наоборот. Если вы настроите его явно, базовое имя по умолчанию больше не будет использоваться, а вместо него будет использоваться явное значение. Базовое имя задачи bootJar или bootWar не изменится.

Andy Wilkinson 02.11.2018 18:47

@AndyWilkinson: Спасибо! Удаление springBoot.buildInfo.properties.artifact и добавление bootJar.baseName сработало!

Brandon Dudek 02.11.2018 19:04
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
29
2
24 319
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

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

bootJar {
   archiveName = 'whatever'
}

Посмотрите здесь.

Спасибо. Я пробовал это, а также jar{baseName 'whatever'}, и ни один из них не работал. (Я думаю, что они работали только в SpringBoot 1.)

Brandon Dudek 02.11.2018 18:37

Это почти правильно. Однако настраиваемая задача должна быть bootJar, а не jar. Я соответствующим образом отредактировал ответ.

Andy Wilkinson 02.11.2018 18:47
Ответ принят как подходящий

Спасибо @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 без версии.

Ruslan Stelmachenko 15.03.2019 18:07

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(). Это ответ для тех, кто хочет иметь ПОЛНЫЙ контроль над именем сборки.

hanzo2001 25.01.2021 16:49

Для 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

Другие вопросы по теме