使用 spring-boot 的 assemble 创建的 jar 的 Gradle 集名称

Posted

技术标签:

【中文标题】使用 spring-boot 的 assemble 创建的 jar 的 Gradle 集名称【英文标题】:Gradle set name for jar created with spring-boot's assemble 【发布时间】:2021-06-11 13:44:19 【问题描述】:

我想用 gradle (kotlin-dsl) 创建一个可执行的 jar,我想给它一个自定义名称。对于可执行 jar,我使用的是 spring boot 插件和./gradlew :app1:assemble:

plugins 
    id("myproject.java-application-conventions")
    id("org.springframework.boot") version "2.2.2.RELEASE"

dependencies 
    implementation(project(":lib"))

application 
    mainClass.set("org.myproject.app.Main")

init 又创建了两个文件,buildSrc/build.gradle.kts

plugins 
    `kotlin-dsl`


repositories 
    gradlePluginPortal()
    mavenCentral()

buildSrc/src/main/kotlin/myproject.java-application-conventions.gradle.kts:

plugins 
    id("lomboker.java-common-conventions")
    application

使用./gradlew :app1:assemble 我可以创建一个可执行的 jar,但我不知道如何设置它的名称。

This question 处理命名 jar,但我不知道如何对我的问题应用任何答案。

向我的 gradle 文件添加 jar 块不起作用:Expression 'jar' cannot be invoked as a function. 它被解释为 sun.tools.jar.resources.jar。所以我改用tasks.jar。 对于

tasks.jar 
    archiveBaseName.set("myapp")
    archiveVersion.set("version")

./gradlew :app1:jar 构建成功时不会创建 jar(无论如何它都无法执行),./gradlew :app1:assemble 会忽略属性并仅创建 ./app1/build/libs/app1.jar

由于我没有使用jar,而是assemble,我想我应该使用tasks.assemble 块。但这不能识别archiveBaseNamearchiveVersion,我也不知道API 是什么。

这是页面:https://plugins.gradle.org/plugin/org.springframework.boot,但我没有找到 API。

【问题讨论】:

【参考方案1】:

assemble 是一个生命周期任务,这意味着它不会创建任何东西。它的作用是触发它所依赖的并且确实有一些输出的其他任务。您可以通过使用--console=plain 运行构建来查看这些任务。

creates the Spring Boot fat jar is named bootJar 的任务。从its javadoc可以看出,它是对Gradle的Jar的自定义,可以同样的方式进行配置:

tasks.bootJar 
    archiveBaseName.set("myapp")
    archiveVersion.set("version")

【讨论】:

以上是关于使用 spring-boot 的 assemble 创建的 jar 的 Gradle 集名称的主要内容,如果未能解决你的问题,请参考以下文章

使用 spring-boot:run 时是不是可以使用 spring-boot 命令行属性?

c# 关闭一个Assembly实例

maven-assembly-plugin的使用

Assembly.LoadFrom() 或 Assembly.Load() 能够删除文件

关于maven的assembly:assembly命令是啥意思?

使用 spring-boot OAuth2 服务器保护的 Spring-boot 应用程序