使用 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
块。但这不能识别archiveBaseName
或archiveVersion
,我也不知道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 命令行属性?
Assembly.LoadFrom() 或 Assembly.Load() 能够删除文件