Spring Boot 2 - 更改 Jar 名称

Posted

技术标签:

【中文标题】Spring Boot 2 - 更改 Jar 名称【英文标题】:Spring Boot 2 - Change Jar Name 【发布时间】:2019-04-06 23:02:49 【问题描述】:

我在我的 Gradle 项目中使用 Spring Boot 2 在 Jenkins 中构建 jar,我想更改该 jar 文件的名称。

默认情况下,Spring Boot 2 使用 Gradle 属性rootProject.name,可以在/settings.gradle 文件中设置。

但是,我想更改 jar 文件名,而不更改 rootProject.name

这是build.gradle 文件中我的bootJarspringBoot 部分:

bootJar 
  launchScript()

.

springBoot 
  buildInfo 
    properties 
      artifact = "jarName"
      group = "groupName"
      name = "projectName"
      version = "1.0"
    
  

注意: artifact 没有像我预期的那样设置 jar 名称,阅读后:https://docs.spring.io/spring-boot/docs/current/gradle-plugin/reference/html/#integrating-with-actuator

【问题讨论】:

artifact 构建信息属性默认情况下源自bootJarbootWar 任务的基本名称,而不是相反。如果显式配置它,将不再使用基于基本名称的默认值,而是使用显式值。 bootJarbootWar 任务的基本名称将不受影响。 @AndyWilkinson:谢谢!删除 springBoot.buildInfo.properties.artifact 并添加 bootJar.baseName 有效! 【参考方案1】:

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

见:

https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Jar.html#org.gradle.api.tasks.bundling.Jar:archiveName

https://docs.gradle.org/current/userguide/lazy_configuration.html

【讨论】:

我一直在寻找操纵模板的秘诀。由于我不是经验丰富的 gradle 处理程序,我忘记了您必须 get() 值。这是那些希望完全控制构建名称的人的答案【参考方案2】:

由于bootJar 任务扩展了Jar,您可以使用archiveName 直接设置名称:

bootJar 
   archiveName = 'whatever'

看看here。

【讨论】:

谢谢。我确实尝试过,以及jarbaseName 'whatever',但都没有成功。 (我认为那些只在 SpringBoot 1 中有效。) 这几乎是对的。不过,定制的任务需要是bootJar 而不是jar。我已经相应地编辑了答案。【参考方案3】:

感谢@AndyWilkinson的回答!

bootJar 
  baseName "jarName"
  launchScript()

.

springBoot 
  buildInfo 
    properties 
      group = "groupName"
      name = "projectName"
      version = "1.0"
    
  

【讨论】:

【参考方案4】:

对于 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())

【讨论】:

【参考方案5】:

我的目标是从存档名称中删除版本。我是这样做的:

bootJar 
   archiveName = "$baseName.$extension"

现在 Gradle 生成“project-name.jar”而不是“project-name-1.0-SNAPSHOT.jar”。此解决方案是通用的,不会对任何特定的存档名称进行硬编码。

【讨论】:

archiveName 属性由于某种原因已被弃用,但我找到了一种更简单的方法:bootJar archiveVersion = null 。这会覆盖archiveVersion 属性的默认值,默认情况下等于project.version。在这种情况下,Jar 任务生成最终的archiveFileName 没有版本。【参考方案6】:

你也可以使用:

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

或者使用 jar 插件

tasks.jar 
    archiveFileName.set("app.jar")

【讨论】:

【参考方案7】:

大多数人只是希望 jar 名称中没有版本,而不是完全更改名称。

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

将使用 Kotlin DSL 来完成。最终名称由tasks.bootJar.get().archiveFileName.get() 给出。

【讨论】:

【参考方案8】:

为我工作

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

主 build.gradle 内部。二手

Gradle 6.X Spring Boot 2.X

【讨论】:

以上是关于Spring Boot 2 - 更改 Jar 名称的主要内容,如果未能解决你的问题,请参考以下文章

spring boot打jar包发布

spring boot打jar包运行,加载jar包外部的页面以及静态资源文件

Spring Boot 打war包部署,打jar包

Spring Boot编译后的jar文件在哪里

Spring Boot 2构建可部署的war包

一个 Spring Boot 项目,部署到 JAR 或 WAR