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
文件中我的bootJar
和springBoot
部分:
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
构建信息属性默认情况下源自bootJar
或bootWar
任务的基本名称,而不是相反。如果显式配置它,将不再使用基于基本名称的默认值,而是使用显式值。 bootJar
或 bootWar
任务的基本名称将不受影响。
@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 名称的主要内容,如果未能解决你的问题,请参考以下文章